We-Co

[We-Co] Spark to_json(), from_json() 본문

Spark

[We-Co] Spark to_json(), from_json()

위기의코딩맨 2021. 9. 15. 11:40
반응형

안녕하세요. 위기의코딩맨입니다.

오늘은 스ㅏ크 2.1.0 이후 버전부터 to_json(), from_json()을 이용하여

Column에서 json 문자열로 처리할 수 있도록 되었습니다.

 

[ to_json() ]

scala> val r1 = ("S2","note",20,2000) 
scala> val r2 = ("S2","bag",10,5000) 
scala> val df = List(r1,r2).toDF("store_nm","prod_nm","amount", "price") 
scala> df.show
+--------+-------+------+-----+
|store_nm|prod_nm|amount|price|
+--------+-------+------+-----+
|      S2|   note|    20| 2000|
|      S2|    bag|    10| 5000|
+--------+-------+------+-----+  

 

scala> df.select(to_json(struct('store_nm,'prod_nm,'amount,'price))as("value")).show(false)
+-----------------------------------------------------------+
|value                                                      |
+-----------------------------------------------------------+
|{"store_nm":"S2","prod_nm":"note","amount":20,"price":2000}|
|{"store_nm":"S2","prod_nm":"bag","amount":10,"price":5000} |
+-----------------------------------------------------------+

 

예제를 살펴보면 store_nm, prod_nm, amount. price를 만들고 df안에 해당 값들을 넣어주었습니다.

그리고 to_json()을 이용하여 해당 Column들을 json형태로 변환하여 결과 값을 출력했습니다.

 

Daraframe에서 Columns을 json 문자열로 변환하는 기본적인 방법은 strut()를 사용하는 것이며

functions object에서 제공하는 메서드입니다.

 

[ from_json() ]

반대로 json 문자열 형태를 Column으로 변경하는 방법은 from_json()을 사용하면됩니다.

 


scala> val v1 = """{store_nm":"S2","prod_nm":"note","amount":20,"price":2000}"""  
scala> val v2 = """{store_nm":"S2","prod_nm":"bag","amount":10,"price":5000}""" 

 

scala> val chema = new StructType().
     | add("store_nm", StringType, false).
     | add("prod_nm", StringType, false).
     | add("amount", IntegerType, false).
     | add("price", IntegerType, false)

 

scala> val options = Map("multiLine" -> "false")

scala> val df = List(v1, v2).toDF("value")

scala> df.select(from_json(' value, schema, options) as "value").

     | select($"value.store_nm", $"value.prod_nm",

     | $"value.amout", $"value.price").

     | show(false)

 

+--------+-------+------+-----+
|store_nm|prod_nm|amount|price|
+--------+-------+------+-----+
|      S2|   note|    20| 2000|
|      S2|    bag|    10| 5000|
+--------+-------+------+-----+  

 

출력 값을 확인해보면 json문자열을 struct Type의 Column으로 변환한 것입니다.

select($"value.store_nm"..) 방식으로 데이터를 조회합니다.

 

 

오늘은 Column 형태의 데이터를 json형태로 변환

반대로 json형태의 데이터를 Column형태로 변환하는 장업을 진행해보았습니다.

데이터를 주고 받을 때 json형태로 주고 받는 상황이 많으므로 참고해야 겠습니다

 

반응형

'Spark' 카테고리의 다른 글

[We-Co] Structured Streaming - Spark  (0) 2021.09.22
[We-Co] Spark Streaming  (0) 2021.09.16
[We-Co] Spark SQL API 메서드(3)  (0) 2021.09.14
[We-Co] Spark SQL API 메서드(2)  (0) 2021.09.13
[We-Co] Spark SQL API 메서드(1)  (0) 2021.09.12