У меня есть следующие входные данные JSON:
{
"lib": [
{
"id": "a1",
"type": "push",
"icons": [
{
"iId": "111"
}
],
"id": "a2",
"type": "pull",
"icons": [
{
"iId": "111"
},
{
"iId": "222"
}
]
}
]
Я хочу получить следующий набор данных:
id type iId
a1 push 111
a2 pull 111
a2 pull 222
Как я могу это сделать?
Этомой текущий кодЯ использую Spark 2.3 и Java 1.8:
ds = spark
.read()
.option("multiLine", true).option("mode", "PERMISSIVE")
.json(jsonFilePath);
ds = ds
.select(org.apache.spark.sql.functions.explode(ds.col("lib.icons")).as("icons"));
Однако результат неправильный:
+---------------+
| icons|
+---------------+
| [[111]]|
|[[111], [222...|
+---------------+
Как получить правильный набор данных?
ОБНОВЛЕНИЕ:
Я пробую этот код, но он генерирует некоторые дополнительные комбинации id
, type
и iId
, которых нет во входном файле.
ds = ds
.withColumn("icons", org.apache.spark.sql.functions.explode(ds.col("lib.icons")))
.withColumn("id", org.apache.spark.sql.functions.explode(ds.col("lib.id")))
.withColumn("type", org.apache.spark.sql.functions.explode(ds.col("lib.type")));
ds = ds.withColumn("its", org.apache.spark.sql.functions.explode(ds.col("icons")));