当字符串包含UDF时,如何传递List [String]来选择或选择spark中的EXP

问题描述 投票:0回答:1

我有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。

scala apache-spark apache-spark-sql hadoop2
1个回答
0
投票

我找到了它无法正常工作的原因,

您可以像下面一样传递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:_*)

请按照以下网址:enter link description here

© www.soinside.com 2019 - 2024. All rights reserved.