Spark JSON извлечь элемент из ArrayType () - PullRequest
0 голосов
/ 26 января 2020

У меня есть несколько JSON файлов со структурой, подобной этим

{
"fields": [ 
 {
   "a": 1,
   "b": "Mike",
   "c": "Jordan"
 },
 {
  "a": 2,
  "b": "Filip",
  "c": "White"
 }
]
}

{
"fields":{
  "a": 2,
  "b": "Mark",
  "c": "Brown"
 }
}

, которые я загружаю в тот же DataFrame

df = spark.read.option("multiLine", True).json("/path/to/jsons")

Мне нужно извлекать только значение для "b" , когда "a" = 2 (в данном случае Марк и Филип). У меня 2 проблемы:

  • «поля» содержат 2 разных типа (Struct и Array (Struct)) в одном столбце
  • как извлечь только поле «b»

Я использую PySpark.
Заранее спасибо.

df.withColumn("b values", col("fields") ... ??)

1 Ответ

2 голосов
/ 26 января 2020

Обработайте их отдельно, а затем объедините результаты:

df = spark.read.options(multiLine=True).json('/FileStore/tables/fields.json')
df1 = spark.read.options(multiLine=True).json('/FileStore/tables/fields2.json')
df = df.select(explode(df['fields']))
df = df.select('col.a','col.b','col.c')
df1 = df1.select('fields.a','fields.b','fields.c')
DF = df.union(df1)
DF = DF.where(DF['a'] == 2).select(DF['b']).show()

+-----+
|    b|
+-----+
|Filip|
| Mark|
+-----+

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...