spark:如何在没有 StructField 的情况下读取 json 列表?

spark: How to read json list without StructField?

有些 ETL 作业需要阅读 json,例如:

[{"f1":1, "f2":2}, {"f1":10, "f2":20}, {"f1":4, "f2":8}]
[{"f1":3, "f2":5}]
[{"f1":7, "f2":9}, {"f1":111, "f2":2}]

每一行输入文件都是一个 json 列表。
但是,schema for spark.read.json 必须是 StructType。 如何将这种没有 StructField 的 json 列表读取到具有指定 schema 的 DataFrame?

看起来你可以这样做:

spark.read
  .json("src/test/resources/test.json")
  .show()

打印:

+---+---+
| f1| f2|
+---+---+
|  1|  2|
| 10| 20|
|  4|  8|
|  3|  5|
|  7|  9|
|111|  2|
+---+---+

其中 spark 的推导模式是:

println(spark.read.json("src/test/resources/test.json").schema)
> StructType(StructField(f1,LongType,true), StructField(f2,LongType,true))