Как получить значения из файла JSON в виде строки в Pyspark / Spark SQL - PullRequest
0 голосов
/ 30 апреля 2020

У меня есть json файл, который выглядит следующим образом

{"Name": "Fullname", "Address": "FullAddress"},

, этот json входит в качестве входных данных из внешнего приложения и может изменяться во времени, например, я могу получить что-то вроде ниже следующего ввода:

{"Имя": "Полное имя", "Адрес": "Полный адрес", " Age ":" DOB "},

Мне нужно извлечь значения из пары ключ: значение в виде строки, аналогично 'Fullname, FullAddress, DOB, .., ...' и т. Д. в зависимости от того, сколько значений я получу в JSON.

. Эти значения отображаются на столбцы в таблицах Had oop. Как только у меня есть строка, я могу использовать ее, чтобы написать запрос spark sql в получить значения из базовых таблиц.

1 Ответ

0 голосов
/ 30 апреля 2020

Вы можете использовать функции concat_ws/concat/array_join для преобразования всех значений столбца в строку.

In Pyspark:

df.show()
#+--------+-----------+---+
#|    Name|    Address|Age|
#+--------+-----------+---+
#|fullname|fulladdress|dob|
#+--------+-----------+---+
from pyspark.sql.functions import *
cols=[x for x in df.columns]

df.select(concat_ws(',',*cols).alias("str")).show(10,False)
#or
df.withColumn("str",array_join(array(*cols),",")).drop(*df.columns).show(10,False)
#+--------------------------------+
#|str                             |
#+--------------------------------+
#|fullname,fulladdress,dob        |
#+--------------------------------+

In Scala:

import org.apache.spark.sql.functions._
val cols= df.columns.map(x => col(x))
df.select(concat_ws(",",cols:_*).alias("str")).show(false)
//or
df.withColumn("str",concat_ws(",",cols:_*)).drop(df.columns:_*).show(false)
df.withColumn("str",array_join(array(cols:_*),",")).drop(df.columns:_*).show(10,false)

//+------------------------+
//|str                     |
//+------------------------+
//|fullname,fulladdress,dob|
//+------------------------+

For keys:

from pyspark.sql.functions import *

keys=",".join(df.columns)

df.withColumn("keys",lit(keys)).show()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...