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数据集

Apache Spark 中的数据集

如何将包含 JSON 的输入 CSV 数据转换为 spark 数据集?

如何将具有值的列添加到 Spark Java 中的新数据集?

带有 Json 输出的 Spark 数据集以 Kryo 编码形式出现

将 Spark 数据集转换为 JSON 并写入 Kafka Producer