我有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。
我找到了它无法正常工作的原因,
您可以像下面一样传递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