Как передать List [String] для выбора или selectExpr в искре, когда строка также содержит UDF - PullRequest
0 голосов
/ 19 марта 2019

У меня есть List [String], как показано ниже

val colList = List(verifyLength($"col1", lit(0), lit(0), lit("RJ"), lit(9)).as("col1"), verifyLength($"col2", lit(0), lit(0), lit("RJ"), lit(16)).as("col2"))

Когда я пытаюсь применить select к фрейму данных, как показано ниже

val selDataDf = df.select(colList.head, colList.tail: _*)

получаю исключение, говоря - org.apache.spark.sql.AnalysisException: cannot resolve '`verifyLength($"col1", lit(0), lit(0), lit("RJ"), lit(9)).as("col1")`' given input columns:

И если я передам строку, как показано ниже, это даст мне результат оператора select.

val selDataDf = df.select(verifyLength($"col1", lit(0), lit(0), lit("RJ"), lit(9)).as("col1"), verifyLength($"col2", lit(0), lit(0), lit("RJ"), lit(16)).as("col2"))

Примечание: «verifyLength» - это пользовательский udf.

1 Ответ

0 голосов
/ 22 марта 2019

Я нашел причину, почему она не работала,

вы можете передать List [String] как показано ниже:

val detailsList = List(verifyLength(col1, 0, 0, 'RJ', 9) as col1, verifyLength(col2, 0, 0, 'RJ', 9) as col2)
spark.udf.register("verifyLength", verifyLengthCheck _)
 val df1= df.selectExpr(detailsList:_*)

Пожалуйста, следуйте по ссылке ниже: введите описание ссылки здесь

...