2016-11-10 55 views
1

有什么办法来解析使用数据集 这里多JSON文件示例代码如何分析数据集中阿帕奇火花Java中的多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" 
} 
+1

[Apache Spark读取一个复杂的JSON文件每个记录RDD或DF]的可能重复(http://stackoverflow.com/questions/34646232/apache-spark-read-one-complex-json-file-per-record -rdd-or-df) – 2016-11-10 06:00:46

+0

@rahul:访问此json文件时遇到了什么问题? – Shankar

+0

我的JSON有空格,数据集读取包含整个对象的单行JSON文件,因此无法解析它的响应:+ -------------------- + | _corrupt_record | + -------------------- + | {| | “name”:“superm ... | |”age“:”unknown“,| |”height“:”6.2“,| |”weight“:”flex ... | | } | + -------------------- + – rahul

回答

2

我最后一次检查星火SQL文档,这站了出来:

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

我已经能够通过使用Spark上下文wholeTextFiles方法,其产生的PairRDD加载JSON来解决这个过去。

见完整的例子“星火SQL JSON实例教程第2部分”一节页面上https://www.supergloo.com/fieldnotes/spark-sql-json-examples/

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

的阿帕奇火花文档明确提到这一点 -

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

因此,该解决方案是

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

我试图与相同的格式(多行一个单一JSON对象)的JSON。添加选项后,我不再看到结果corrupted_record结果头。

+0

这应该是接受的答案。 –