Преобразование вложенных нулевых значений в пустые строки в искре датафрейма - PullRequest
2 голосов
/ 18 сентября 2019

Я хочу преобразовать пустые значения, вложенные в массив строк, в пустые строки в искре.Данные находятся в кадре данных.Я планирую запустить функцию Reduce после того, как сделаю dataframe пустым, не уверен, поможет ли это в ответе на вопрос.Я использую свечу 1.6.

Схема:

root
|-- carLineName: array (nullable = true)
|    |-- element: string (containsNull = true)

Пример ввода:

+--------------------+
|carLineName         |
+--------------------+
|[null,null,null]    |
|[null, null]        |
|[Mustang, null]     |
|[Pilot, Jeep]       |

Желаемый вывод:

+--------------------+
|carLineName         |
+--------------------+
|[,,]                | 
|[,]                 |
|[Mustang,]          |
|[Pilot, Jeep]       |

Моя попытка:

val safeString: Seq[String] => Seq[String] = s => if (s == null) "" else s
val udfSafeString = udf(safeString)

1 Ответ

2 голосов
/ 19 сентября 2019

Входные данные для UDF представляют собой последовательность строк, а не одну строку.Так как это так, вам нужно map над ним.Вы можете сделать это следующим образом:

val udfSafeString = udf((arr: Seq[String]) => {
  arr.map(s => if (s == null) "" else s)
})

df.withColumn("carLineName", udfSafeString($"carLineName"))
...