#scala #apache-spark #apache-spark-sql
Вопрос:
{ "cars": { "Nissan": { "Sentra": {"doors":4, "transmission":"automatic"}, "Maxima": {"doors":4, "transmission":"automatic","colors":["b#lack","pin###k"]} }, "Ford": { "Taurus": {"doors":4, "transmission":"automatic"}, "Escort": {"doors":4, "transmission":"auto#matic"} } } }
У меня есть этот JSON, который я прочитал, и я хочу удалить каждый символ # в каждой строке, которая может существовать. Моя проблема заключается в том, что эта функция универсальна, поэтому она может работать со всеми схемами, с которыми я могу столкнуться, а не только с этой схемой, используемой в JSON выше.
Комментарии:
1. где находится фрейм данных?
Ответ №1:
Вы могли бы сделать что-то вроде этого: получить все поля из схемы, использовать fold
с DataFrame
самим собой в качестве аккумулятора и применить функцию, которую вы хотите
def replaceSymbol(df: DataFrame): DataFrame = df.schema.fieldNames.foldLeft(df)((df, field) =gt; df.withColumn(field, regexp_replace(col(field), "#", "")))
Возможно, вам потребуется проверить, является ли столбец строковым или нет.
Комментарии:
1. Я думаю, что это не сработало бы для вложенных полей