У меня есть такая таблица:
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 из коробки?