如何在java中使用spark读取json数组等复杂数据类型并加载到hive表中

eeq64g8w  于 2021-06-25  发布在  Hive
关注(0)|答案(1)|浏览(465)

我有一个数据集,它有简单(字符串)和复杂数据类型的组合,用管道分隔。

1111|1234567891011|ABC11|JOSE|"linkEnrollment": {"Group": [{"action": "ADD","groupType": "ROSS","groupId": "GRP-1","isValid": "Y"},{"action": "ADD","groupType": "CROSS","groupId": "GRP-2","isValid": " "}]}
2222|9876543256827|ABC22|JACK|"linkEnrollment": {"Group": [{"action": "DEL","groupType": "ROCK","groupId": "GRP-7","isValid": "N"}]}

相应列为:

UUID(String)|PID(String)|DEVID(String)|FIRSTNAME(String)|LINK(String which is a JSON)

我的要求是我需要使用sparkjava将这些数据加载到一个配置单元表中。我需要知道:
如何读取上述数据并转换为dataframe(使用structtype架构)以插入到配置单元表中。
如何将链接列数据加载到配置单元表中,它在表中的数据类型是什么。
请帮忙。

r55awzrz

r55awzrz1#

您可以使用spark csv loader读取文件

Dataset<Row> ds = spark.read().format("csv")
 .option("sep", "|")
 .option("inferSchema", "true")
 .option("header", "true")
 .load("youfile.csv");

然后您可以使用from\ json解压json列

val jsonData = spark.read.json(ds.map(x=>x.getString("your_column"))

如何使用spark dataframes查询json数据列?
然后您可以将它存储在配置单元中,json列将是您可以查询的structtype

相关问题