python pyspark에서 sqlContext의 dataframe 구조에서 특정 컬럼을 explode 하는 방법이 있을까요?
조회수 807회
%pyspark
sc.stop()
from pyspark import SparkConf, SparkContext, SQLContext
from pyspark.sql.functions import explode
import json
conf = SparkConf().setMaster("spark://local").setAppName("text")
sc = SparkContext(conf = conf)
sqlContext = SQLContext(sc)
df = sqlContext.read.json("file:///home/test/data/test.json")
df.select(df.data).show()
위 코드처럼 전체 dataframe에서 data라는 컬럼만 select해서 show()하면
| data |
row({key:val1, key2:val1})
row({key:val2, key2:val2})
row({key:val3, key2:val3})
row({key:val4, key2:val4})
대충 이런 구조로 선택됩니다. 그런데 최종적으로 원하는 구조는 key와 key2가 컬럼명으로 오고 각 컬럼에 맞춰 value들이 위치하게 구조를 바꾸고 싶은데 어떻게 하면좋을까요? python이나 spark문법 중에 알려주시면 감사하겠습니다.
1 답변
-
val jsonStr = Seq("""{"id" : "1", "name": "aaaaa", "addr": "seoul", "data": "{\"column_name1\":\"value1\",\"column_name2\":\"value2\"}"}""", """{"id" : "2", "name": "bbbbb", "addr": "pusan", "data": "{\"column_name1\":\"value3\",\"column_name2\":\"value4\"}"}""") val rddData = spark.sparkContext.parallelize(jsonStr) val resultDF = spark.read.json(rddData) resultDF.selectExpr("id", "name", "addr", "get_json_object(data, '$.column_name1') as column_name1", "get_json_object(data, '$.column_name2') as column_name2").show() +---+-----+-----+------------+------------+ | id| name| addr|column_name1|column_name2| +---+-----+-----+------------+------------+ | 1|aaaaa|seoul| value1| value2| | 2|bbbbb|pusan| value3| value4| +---+-----+-----+------------+------------+
댓글 입력