искра обрабатывает данные json внутри файла csv

Как обрабатывать данные json внутри файла csv. Я пытаюсь использовать from_json, но при этом мне нужно указать мою схему, где моя схема продолжает меняться.

образец ввода: -

userid   type          data
26594    p.v    {}                                                                                                                                                                                                                                                                                                                                                             
26594    s.s    {"sIds":["1173","1342","12345"]}

26594    s.r    {"bp":"sw"}                                                                                                                                                                                                                                                                                                                                
26594    p.v      {}                                                                                                                                                                                                                                                                                                                                                             
26594    s.r     {"c":"tracking","action":"n","label":"ank"}                                                                                                                                                                                                                                                                            
26593    p.v     {}                                                                                                                                                                                                                                                                                                                                                             
26594    p.sr     {"pId":"11234","pName":"sahkas","s":"n","is":"F","totalCount":0,"scount":0}  

Я хочу преобразовать это в фрейм данных, с помощью которого мы можем запросить json.

Ищете вывод, например: -

 userid    type    data_sids    data_bp    data_c    data_action    data_label
 26594     p.v      null         null       null     null    null
 26594     s.s      1173         null       null     null    null
 26594     s.s      1173         null       null     null    null  
 26594     s.s      1342         null       null     null    null
 26594     s.s      12345         null       null     null    null  
 26594      s.r     null          sw          null    null     null

Это выполнимо?

Не могли бы вы помочь мне с этим?

Спасибо,

Анкуш Редди.


person ankush reddy    schedule 27.05.2018    source источник


Ответы (1)


Мой совет работать с RDD для этой задачи. Напишите что-то вроде этого:

rdd = # collection of Rows with the following fields: userid, type, data - your CSV
def flatten_json(userid, type, data_json):
    final_row = {"userid": userid, "type": type, "data_sids": data_json["sids"], ...}
    return Row(**final_row)
rdd = rdd.map(lambda row: flatten_json(row["userid"], row["type"], row["data"]))
df = spark.createDataFrame(rdd)

И это все :)

person dogli980    schedule 27.05.2018