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