Разбор вложенного столбца JSON в Spark - PullRequest
0 голосов
/ 21 марта 2019

У меня есть пример данных ниже, в качестве кадра данных

id|data
1,{"a":["xyz","x"],"b":["abc","ab"]}
2,{"a":["zy","y"],"b":["ac","bc"]}

Это мой ожидаемый результат:

id|details
1,abc
2,ac

Это то, с чем я пришел до сих пор,

dataframe.withColumn("details",from_json($"data",StructType(Seq(StructField("b",ArrayType(StringType),true)))))

Это вывод, который я сейчас получаю

1,[abc,ab]
2,[ac,bc]

Кроме того, это всего лишь пример, у меня более 100 столбцов, поэтому я не могу использовать предложение select.Хотите решить эту проблему, используя withColumn.

1 Ответ

2 голосов
/ 21 марта 2019

Предполагая, что вы хотите иметь первый элемент массива b на основе уже вычисленного столбца details, просто выберите первый элемент b:

 dataframe.withColumn("details", expr("details.b[0]"))

Вы такжеможно использовать функции getField и getItem непосредственно для результата from_json

dataframe.withColumn("details",from_json($"data",StructType(Seq(StructField("b",ArrayType(StringType),true)))).getField("b").getItem(0))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...