【问题标题】:Convert nested json to dataframe in scala spark在scala spark中将嵌套的json转换为数据框
【发布时间】:2020-04-04 22:08:14
【问题描述】:

我想只为给定的键创建 json 数据框。它的值是一个列表,它是嵌套的 json 类型。我尝试了扁平化,但我认为可能有一些解决方法,因为我只需要一个 json 键即可转换为数据框。 我有像这样的json:

   ("""
       {
            "Id_columns": 2,
            "metadata": [{
            "id": "1234",
            "type": "file",
            "length": 395
            }, {
            "id": "1235",
            "type": "file2",
            "length": 396
            }]
    }""")

现在我想使用 spark 为键“元数据”创建一个 DataFrame,我已经编写了代码:

val json = Json.parse("""
           {
                "Id_columns": 2,
                "metadata": [{
                "id": "1234",
                "type": "file",
                "length": 395
                }, {
                "id": "1235",
                "type": "file2",
                "length": 396
                }]
        }""")

var jsonlist = Json.stringify(json("metadata"))
val rddData = spark.sparkContext.parallelize(jsonlist)
resultDF = spark.read.option("timestampFormat", "yyyy/MM/dd HH:mm:ss ZZ").json(rddData)
resultDF.show()

但它给了我错误:

overloaded method value json with alternatives:
cannot be applied to (org.apache.spark.rdd.RDD[Char])
[error] val resultDF = spark.read.option("timestampFormat", "yyyy/MM/dd HH:mm:ss ZZ").json(rddData)

                                                                                      ^

我期待结果:

+----+-----+--------+
| id | type| length |
+----+-----+--------+
|1234|file1| 395    |
|1235|file2| 396    |
+----+-----+--------+

【问题讨论】:

    标签: scala apache-spark apache-spark-sql


    【解决方案1】:

    你需要像这样爆炸你的数组:

    import spark.implicits._
    import org.apache.spark.sql.functions._
    
    val df = spark.read.json(
          spark.sparkContext.parallelize(Seq("""{"Id_columns":2,"metadata":[{"id":"1234","type":"file","length":395},{"id":"1235","type":"file2","length":396}]}"""))
        )
    
    df.select(explode($"metadata").as("metadata"))
          .select("metadata.*")
          .show(false)
    

    输出:

    +----+------+-----+
    |id  |length|type |
    +----+------+-----+
    |1234|395   |file |
    |1235|396   |file2|
    +----+------+-----+
    

    【讨论】:

    猜你喜欢
    • 2020-08-24
    • 2019-09-26
    • 2017-09-19
    • 2020-08-12
    • 1970-01-01
    • 2020-12-30
    • 2019-07-08
    • 1970-01-01
    相关资源
    最近更新 更多