【发布时间】:2019-03-17 18:23:08
【问题描述】:
我有这种 JSON 数据:
{
"data": [
{
"id": "4619623",
"team": "452144",
"created_on": "2018-10-09 02:55:51",
"links": {
"edit": "https://some_page",
"publish": "https://some_publish",
"default": "https://some_default"
}
},
{
"id": "4619600",
"team": "452144",
"created_on": "2018-10-09 02:42:25",
"links": {
"edit": "https://some_page",
"publish": "https://some_publish",
"default": "https://some_default"
}
}
}
我使用 Apache spark 读取了这些数据,我想将它们按 id 列分区写入。当我使用这个时:
df.write.partitionBy("data.id").json(<path_to_folder>)
我会得到错误:Exception in thread "main" org.apache.spark.sql.AnalysisException: Partition column data.id not found in schema
我也尝试过使用这样的爆炸功能:
import org.apache.spark.sql.functions.{col, explode}
val renamedDf= df.withColumn("id", explode(col("data.id")))
renamedDf.write.partitionBy("id").json(<path_to_folder>)
这确实有帮助,但每个 id 分区文件夹都包含相同的原始 JSON 文件。
编辑:df DataFrame 的架构:
|-- data: array (nullable = true)
| |-- element: struct (containsNull = true)
| | |-- created_on: string (nullable = true)
| | |-- id: string (nullable = true)
| | |-- links: struct (nullable = true)
| | | |-- default: string (nullable = true)
| | | |-- edit: string (nullable = true)
| | | |-- publish: string (nullable = true)
重命名的 Df DataFrame 的架构:
|-- data: array (nullable = true)
| |-- element: struct (containsNull = true)
| | |-- created_on: string (nullable = true)
| | |-- id: string (nullable = true)
| | |-- links: struct (nullable = true)
| | | |-- default: string (nullable = true)
| | | |-- edit: string (nullable = true)
| | | |-- publish: string (nullable = true)
|-- id: string (nullable = true)
我使用的是 spark 2.1.0
我找到了这个解决方案:DataFrame partitionBy on nested columns
还有这个例子:http://bigdatums.net/2016/02/12/how-to-extract-nested-json-data-in-spark/
但是这些都没有帮助我解决我的问题。
感谢 andvance 提供的任何帮助。
【问题讨论】:
-
你能发布 df.printSchema 的输出并重命名为 DF.printschema
-
最新的 spark 有一个多行选项来读取嵌套的 json,你可以试试
-
抱歉回复晚了。我在上面的问题中添加了您需要的架构。
标签: json apache-spark dataframe partition-by