【问题标题】:scala read json and extract required column datascala读取json并提取所需的列数据
【发布时间】:2018-09-09 04:45:22
【问题描述】:

我正在读取 json 多行 json 文件包含 60 多个字段,只需要 30 个字段作为列,我如何从数据框中获取所需的列数据。

scala> peopleDF.printSchema
root
 |-- Applications: array (nullable = true)
 |    |-- element: struct (containsNull = true)
 |    |    |-- b_als_o_isehp: boolean (nullable = true)
 |    |    |-- b_als_p_isehp: boolean (nullable = true)
 |    |    |-- b_als_s_isehp: boolean (nullable = true)
 |    |    |-- l_als_o_eventid: long (nullable = true)
 |    |    |-- l_als_o_pid: long (nullable = true)
 |    |    |-- l_als_o_sid: long (nullable = true)

如何仅获取所需的列。(如 l_als_o_pid、l_als_o_eventid、b_als_o_isehp)。

 val peopleDF = spark.read.json("file:///root/users/inputjsondata/s_json2.json")
   var ss = peopleDF.select("Applications");
   ss.createOrReplaceTempView("result2")
   val child = ss.select(explode(peopleDF("Applications.t_als_s_path"))).toDF("app").show()

【问题讨论】:

    标签: json scala apache-spark dataframe dataset


    【解决方案1】:

    您可以explode第一个array字段并选择内部字段为

    val peopleDF = spark.read.json("file:///root/users/inputjsondata/s_json2.json")
    val newDF = peopleDF.select(explode($"Applications").as("app"))
                .select("app.*")
    

    现在您可以直接选择 l_als_o_pid, l_als_o_eventid,b_als_o_isehp 等字段 希望这会有所帮助!

    【讨论】:

      猜你喜欢
      • 2022-10-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-02
      • 1970-01-01
      • 2019-06-18
      • 1970-01-01
      相关资源
      最近更新 更多