get_json_object с путем, основанным на строке? - PullRequest
0 голосов
/ 28 июня 2018

У меня есть такая таблица:

row  | key   |  json
0    | a     |  {'something':{'a':1}}
1    | b     |  {'something':{'a':2, 'b':3 }}

И я хотел бы получить значения в json, определенные в столбце key:

row | value
0   | 1 // from $.something.a
1   | 3 // from $.something.b

на улей можно сделать

select get_json_object(json, concat("$.something.", key) from table;

и он вернет правильное значение. Однако в pyspark я не нашел способа воспроизвести это поведение, он, похоже, не в состоянии построить базу путей на столбце. Я пытался

context.table("table").select(
    get_json_object(F.col("json", concat("$something.", F.col("key"))
);

и он говорит мне: «Столбец не повторяется». Тем не менее, использование только concat работает нормально:

context.table("table")
 .select(
    concat("$something.", F.col("key").alias(path)
 );

row | path
0   | $.something.a
1   | $.something.b

Мне удалось сделать это с помощью UDF, но есть ли способ выполнить это с PySpark из коробки?

...