如何在数据集apache spark java中解析多行json

时间:2016-11-10 05:57:39

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

有没有办法使用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"
}

3 个答案:

答案 0 :(得分:4)

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标题的结果了。

答案 1 :(得分:2)

上次我查看了Spark SQL文档,这很突出:

  

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

我过去能够通过使用生成PairRDD的Spark Context wholeTextFiles方法加载JSON来解决这个问题。

参见&#34; Spark SQL JSON示例教程第2部分&#34;中的完整示例;本页的https://www.supergloo.com/fieldnotes/spark-sql-json-examples/

部分

答案 2 :(得分:1)

    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);