如何使用Spark / Spark SQL将JSON blob压缩为数据框

时间:2016-11-17 23:38:12

标签: apache-spark apache-spark-sql spark-dataframe

我想在Spark-Shell中使用Spark / Spark SQl将JSON blob压缩成数据帧。

val df = spark.sql("select body from test limit 3"); // body is a json encoded blob column
val df2 = df.select(df("body").cast(StringType).as("body"))

当我做的时候

df2.show //显示3行

body

------------------------------------

{"k1": "v1", "k2": "v2" }

{"k3": "v3"}

{"k4": "v4", "k5": "v5", "k6": "v6"}

-------------------------------------

现在说我有十亿个这样的行/记录,但最多只有5个不同的json模式用于所有十亿行。现在我如何展平以便以下面的格式获得数据框?我应该使用df.forEach还是df.forEachPartition或df.explode或df.flatMap?我如何确保我没有创建十亿个数据框并试图将所有这些数据框结合在一起或者更低效。如果我能看到代码示例,那就太好了。此外,因为这可能没有,我想知道他们是否会占用任何空间?

"K1" | "K2" | "K3" | "K4" | "K5" | "K6"
---------------------------------------
"V1" | "V2" |
            | "V3" |
                   | "V4" | "V5" | "V6"

1 个答案:

答案 0 :(得分:2)

不确定您使用的是什么版本的Spark,但请查看此示例:

Spark SQL JSON

所以,如果你做了类似的事情:

bitmap.compress(Bitmap.CompressFormat.PNG, 100, new FileOutputStream(someFile));

Spark SQL将完成繁重的工作。