JSON 到 Spark 中的数据集
Posted
技术标签:
【中文标题】JSON 到 Spark 中的数据集【英文标题】:JSON to dataset in Spark 【发布时间】:2016-09-30 12:46:23 【问题描述】:我遇到了一个问题,正在寻求您的帮助。我的任务是将JSON
文件转换为dataSet
,以便可以将其加载到HIVE
。
代码 1
SparkSession spark1 = SparkSession
.builder()
.appName("File_Validation")
.config("spark.some.config.option", "some-value")
.getOrCreate();
Dataset<Row> df = spark1.read().json("input/sample.json");
df.show();
上面的代码给我一个 NullPointerException。 我尝试了另一种方法
代码 2
JavaRDD<String> jsonFile = context.textFile("input/sample.json");
Dataset<Row> df2 = spark1.read().json(jsonFile);
df2.show();
创建一个 RDD 并将其传递给 spark1 (sparkSession)
此代码 2 将 json 制作成另一种格式,标题为
+--------------------+
| _corrupt_record|
+--------------------+
with schema as - |-- _corrupt_record: string (nullable = true)
请帮忙修复它。
示例 JSON
"user": "gT35Hhhre9m",
"dates": ["2016-01-29", "2016-01-28"],
"status": "OK",
"reason": "some reason",
"content": [
"foo": 123,
"bar": "val1"
,
"foo": 456,
"bar": "val2"
,
"foo": 789,
"bar": "val3"
,
"foo": 124,
"bar": "val4"
,
"foo": 126,
"bar": "val5"
]
【问题讨论】:
【参考方案1】:您的 JSON 应该在一行中 - 每个对象在一行中一个 json。 例如:
"property1: 1
"property1: 2
它将被读取为数据集,其中包含 2 个对象和一列
来自documentation:
请注意,作为 json 文件提供的文件不是典型的 JSON 文件。每行必须包含一个单独的、自包含的有效 JSON 对象。因此,一个常规的多行 JSON 文件将 最常失败。
当然是用 SparkSession 读取数据,因为它会推断架构
【讨论】:
@skjagini 是的,现在它已经改变了。谢谢,我忘了更新答案:)【参考方案2】:您无法在 spark 中读取格式化的 JSON
,您的 JSON
应该在 single line
中,如下所示:
"user": "gT35Hhhre9m","dates": ["2016-01-29", "2016-01-28"],"status": "OK","reason": "some reason","content": ["foo": 123,"bar": "val1", "foo": 456,"bar": "val2", "foo": 789,"bar": "val3", "foo": 124,"bar": "val4", "foo": 126,"bar": "val5"]
或者它可以是多行 JSON like 这个:
"name":"Michael"
"name":"Andy", "age":30
"name":"Justin", "age":19
【讨论】:
就像我的回答一样 ;)以上是关于JSON 到 Spark 中的数据集的主要内容,如果未能解决你的问题,请参考以下文章
Spark基础学习笔记26:Spark SQL数据源 - JSON数据集
如何将包含 JSON 的输入 CSV 数据转换为 spark 数据集?
如何将具有值的列添加到 Spark Java 中的新数据集?