1

有什么方法可以使用 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"
}
4

3 回答 3

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

于 2018-02-01T05:30:55.293 回答
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);
于 2016-11-21T06:21:32.670 回答
2

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

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

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

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

于 2016-11-10T14:11:30.447 回答