Возможно добавить упаковщик udf к этой операции с фреймом данных - PullRequest
0 голосов
/ 05 ноября 2018
var result_df1 = result_df.select(result_df.columns.map(c => col(c).cast(StringType)): _ * )

Это моя операция с данными, которую я выполняю. У меня есть udf с именем EmptyToNull, который принимает один параметр, значение, проверяет, является ли он пустым, если это так, он меняет его на ноль. Можно ли вызвать этот UDF в этой операции с фреймом данных, которую я уже выполняю?

1 Ответ

0 голосов
/ 05 ноября 2018

Функция "col" может быть заключена в UDF:

// functions
val emptyToNull : (String) => String = (value: String) => if(StringUtils.isBlank(value)) null else value
val emptyToNullUDF = udf(emptyToNull)

// usage
val result_df= List(("NonEmpty"," ") ).toDF("nonempty","empty")
    val result_df1 = result_df.select(result_df.columns.map(c => emptyToNullUDF(col(c)).alias(c).cast(StringType)): _ * )
result_df1.show(false)

Выход:

+--------+-----+
|nonempty|empty|
+--------+-----+
|NonEmpty|null |
+--------+-----+

Примечание: «псевдоним» используется для сохранения имен столбцов. Кроме того, если исходные столбцы имеют StringType, условие ".cast (StringType)" не требуется.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...