【问题标题】:how to get nested column from json file using apache spark in java [closed]如何在java中使用apache spark从json文件中获取嵌套列[关闭]
【发布时间】:2017-04-24 10:18:02
【问题描述】:

我有多个 json 文件。我必须使用 apache spark 解析它。它有嵌套的键初始化。我必须打印所有列以及嵌套键。

文件也有嵌套键。 我想获取所有列名以及嵌套列名。我怎么能得到它。

我试过这个:

String jsonFilePath = "/home/vipin/workspace/Smarten/jsonParsing/Employee/Employee-01.json,/home/vipin/workspace/Smarten/jsonParsing/Employee/Employee-02.json";

String[] jsonFiles = jsonFilePath.split(",");

Dataset<Row> people = sparkSession.read().json(jsonFiles);

文件中的json结构为:

{ 
   "Name":"Vipin Suman",
   "Email":"vpn2330@gmail.com",
   "Designation":"Programmer",
   "Age":22 ,
   "location":
             {
             "City":"Ahmedabad",
             "State":"Gujarat"
             }
}

我得到的结果是:

people.show(50, false);

Age | Designation | Email            | Name       | Location
------------------------------------------------------------
22  |Programmer   |vpn2330@gmail.com | Vipin Suman|[Ahmedabad,Gujarat]

我想要这样的数据:

Age | Designation | Email            | Name       | City      | State
------------------------------------------------------------
22  |Programmer   |vpn2330@gmail.com | Vipin Suman| Ahmedabad |Gujarat

或喜欢:-

Age | Designation | Email            | Name       | Location
---------------------------------------------------------------
22  |Programmer   |vpn2330@gmail.com | Vipin Suman| Ahmedabad,Gujarat

如果 scema 看起来像这样

root
 |-- Age: long (nullable = true)
 |-- Company: struct (nullable = true)
 |    |-- Company Name: string (nullable = true)
 |    |-- Domain: string (nullable = true)
 |-- Designation: string (nullable = true)
 |-- Email: string (nullable = true)
 |-- Name: string (nullable = true)
 |-- Test: array (nullable = true)
 |    |-- element: string (containsNull = true)
 |-- location: struct (nullable = true)
 |    |-- City: struct (nullable = true)
 |    |    |-- City Name: string (nullable = true)
 |    |    |-- Pin: long (nullable = true)
 |    |-- State: string (nullable = true)  

和json结构

{ 
  "Name":"Vipin Suman",
  "Email":"vpn2330@gmail.com",
 "Designation":"Trainee Programmer",
 "Age":22 ,
 "location":
    {"City":
           {
            "Pin":324009,
            "City Name":"Ahmedabad"
           },
    "State":"Gujarat"
   },
 "Company":
          {
           "Company Name":"Elegant",
           "Domain":"Java"
          }, 
 "Test":["Test1","Test2"]

}

那么我如何找到嵌套键。并以适当的形式显示表格

【问题讨论】:

  • 请准备:输入数据示例,你做了什么,有什么问题?

标签: java apache-spark apache-spark-sql spark-dataframe business-intelligence


【解决方案1】:

要以上述预期格式显示数据,您可以使用以下代码:

people.select("*", "location.*").drop("location").show

它将给出以下输出:

+---+-----------+-----------------+----------+---------+-------+
|Age|Designation|            Email|      Name|     City|  State|
+---+-----------+-----------------+----------+---------+-------+
| 22| Programmer|vpn2330@gmail.com|VipinSuman|Ahmedabad|Gujarat|
+---+-----------+-----------------+----------+---------+-------+

【讨论】:

  • 非常感谢@himanshuIIITian 的回复。我能再问你一个问题吗?如果我不知道嵌套了什么键,我怎么能找到它。或者如果我有多个嵌套列,那么我该如何找到并解决这种情况。
  • @Vpn_talent 这是不可能的,因为如果我们不知道数据框的架构,那么我们就无法知道它是否嵌套。
  • @Vpn_talent 这个答案解决了你的问题吗?
  • 您的回答解决了我的问题。但我遇到了另一个问题。所以我编辑了问题。我在以适当的形式显示表格时遇到问题。你能帮帮我吗?我是 spark 的初学者
  • 任何可能的方式将“位置”列作为“location.city”和“location.state”?我知道我们可以使用“withColumnRenamed”方法,但是如果有 100 列呢?任何建议都会有所帮助。
猜你喜欢
  • 2019-05-02
  • 2017-09-22
  • 2021-10-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-09
  • 2021-10-25
相关资源
最近更新 更多