Для Spark 2.40+ вы можете использовать функцию SparkSQL filter () , чтобы найти первый элемент массива, который соответствует key == serarchkey
, а затем получить его значение. Ниже приведен шаблон фрагмента Spark SQL ( searchkey в качестве переменной) для выполнения первой части, упомянутой выше.
stmt = '''filter(event_params, x -> x.key == "{}")[0]'''.format(searchkey)
Запустите вышеуказанный stmt с expr()
назначьте значение ( StructType ) временному столбцу f1
, а затем используйте функцию coalesce()
для получения ненулевого значения.
from pyspark.sql.functions import expr
df.withColumn('f1', expr(stmt)) \
.selectExpr("coalesce(f1.value.string_value, string(f1.value.int_value),'---') AS event_category") \
.show()
Дайте мне знатьесли у вас возникли проблемы с запуском вышеуказанного кода.