【问题标题】:How to parse a multiline json in dataset apache spark java如何在数据集apache spark java中解析多行json
【发布时间】:2017-03-24 01:57:21
【问题描述】:

有什么方法可以使用 Dataset 解析多行 json 文件 这是示例代码

public static void main(String[] args) {

    // creating spark session
    SparkSession spark = SparkSession.builder().appName("Java Spark SQL basic example")
                .config("spark.some.config.option", "some-value").getOrCreate();

    Dataset<Row> df = spark.read().json("D:/sparktestio/input.json");
    df.show();
}

如果 json 在单行中,它可以完美运行,但我需要它用于多行

我的json文件

{
  "name": "superman",
  "age": "unknown",
  "height": "6.2",
  "weight": "flexible"
}

【问题讨论】:

  • @rahul:您在访问这个 json 文件时遇到了什么问题?
  • 我的 json 有空格,数据集读取包含整个对象的单行 json 文件,因此无法解析它响应 :+---------------- ----+ | _corrupt_record| +--------------------+ | {| | “姓名”:“超级...| | “年龄”:“未知”,| | “身高”:“6.2”,| | “体重”:“弹性...| | }| +--------------------+

标签: java json hadoop apache-spark apache-spark-dataset


【解决方案1】:

上次我检查 Spark SQL 文档时,这很突出:

请注意,作为 json 文件提供的文件不是典型的 JSON 文件。每行必须包含一个单独的、自包含的有效 JSON 对象。因此,一个常规的多行 JSON 文件将 最常失败。

过去我可以通过使用 Spark Context wholeTextFiles 方法加载 JSON 来解决这个问题,该方法会生成 PairRDD。

请参阅本页“Spark SQL JSON 示例教程第 2 部分”部分中的完整示例https://www.supergloo.com/fieldnotes/spark-sql-json-examples/

【讨论】:

    【解决方案2】:
        SparkSession spark = SparkSession.builder().appName("Java Spark Hive Example")
                .config("spark.sql.warehouse.dir", warehouseLocation).enableHiveSupport().getOrCreate();
    
        JavaRDD<Tuple2<String, String>> javaRDD = spark.sparkContext().wholeTextFiles(filePath, 1).toJavaRDD();
    
        List<Tuple2<String, String>> collect = javaRDD.collect();
        System.out.println("everything =  " + everything);
    

    【讨论】:

      【解决方案3】:

      apache spark 文档清楚地提到了这一点 -

      对于常规的多行 JSON 文件,将 multiLine 选项设置为 true。

      因此,解决方案是

      Dataset<Row> df = spark.read().option("multiLine", true).json("file:/a/b/c.json");
      df.show();          
      

      我已经尝试过具有相同格式的 json(一个跨多行的单个 json 对象)。添加选项后,我不再看到带有corrupted_record 标头的结果。

      【讨论】:

        猜你喜欢
        • 2017-07-23
        • 2017-04-27
        • 1970-01-01
        • 2016-01-15
        • 2017-03-18
        • 1970-01-01
        • 1970-01-01
        • 2014-03-17
        • 2014-08-05
        相关资源
        最近更新 更多