我从下面的json创建了数据帧 .
val df = sqlContext.read.json("my.json")
之后,我想从Spark数据帧创建一个rdd(key,JSON) . 我找到了df.toJSON . 但是,它创建了rdd [string] .
我想创建rdd [string(key),string(JSON)] . 如何在spark中将spark数据帧转换为rdd(string(key),string(JSON)) .
我的数据框如下所示 .
root
|-- id: string (nullable = true)
|-- name: string (nullable = true)
|-- data: array (nullable = true)
| |-- element: struct (containsNull = true)
| | |-- data1: string (nullable = true)
| | |-- data2: double (nullable = true)
| | |-- data3: double (nullable = true)
|-- image: string (nullable = true)
|-- flag: boolean (nullable = true)
2 回答
我可以给你一个解决方案,虽然我不知道你的用例是什么,因为如果你想提取id作为区分json文件的关键,我想你可以只过滤数据帧上的id列 . 无论如何以下方法可以满足您的要求:
测试json文件:test.json
scala代码(withColumn udf json4s):
更新:
如果你真的想最终使用rdd,那么有一个更简单的方法:
简化Linbo的答案,SparkSQL已经有UDF来提取json字段: