Python AnalysisException,pyspark无法解析数据帧查询内的变量

Python AnalysisException,pyspark无法解析数据帧查询内的变量,python,pyspark,pyspark-sql,pyspark-dataframes,Python,Pyspark,Pyspark Sql,Pyspark Dataframes,我这里有一行pyspark脚本 df_output = df.select("*",$checkcol) df_output.show() 通过硬编码变量,它可以正常工作, 但是当参数化时,它会抛出一个错误说 pyspark.sql.utils.AnalysisException:'无法解析\'`*',F….. 其中,checkcol是一个值如下的变量 方格- F.when(F.col("colA")=='null',"Yes").otherwise(date_validation_udf(

我这里有一行pyspark脚本

df_output = df.select("*",$checkcol) 
df_output.show()
通过硬编码变量,它可以正常工作, 但是当参数化时,它会抛出一个错误说

pyspark.sql.utils.AnalysisException:'无法解析\'`*',F…..

其中,
checkcol
是一个值如下的变量

方格-

F.when(F.col("colA")=='null',"Yes").otherwise(date_validation_udf("colA")).alias("colA_DateCheck"),
F.when(F.col("colB")=='null',"Yes").otherwise(date_validation_udf("colB")).alias("colB_DateCheck"),F.when(F.col("colC")=='null',"Yes").otherwise(date_validation_udf("colC")).alias("colC_DateCheck"),
F.when(F.col("colD")=='null',"Yes").otherwise(num_check_udf("colD")).alias("colD_NumCheck"),F.when(F.col("colE")=='null',"Yes").otherwise(num_check_udf("colE")).alias("colE_NumCheck"),
F.when(F.col("colF")=='null',"Yes").otherwise(num_check_udf("colF")).alias("colF_NumCheck"),F.when(F.col("colG")=='null',"Yes").otherwise(num_check_udf("colG")).alias("colG_NumCheck")
试试这个:

import pyspark.sql.functions as F

df_output = df.withColumn("colA",
                          F.when(F.col("colA")=='null',"Yes").otherwise(date_validation_udf("colA")).alias("colA_DateCheck"))
              .withColumn("colB",
                          F.when(F.col("colB")=='null',"Yes").otherwise(date_validation_udf("colB")).alias("colB_DateCheck"),F.when(F.col("colC")=='null',"Yes").otherwise(date_validation_udf("colC")).alias("colC_DateCheck"),)
              ...

df_output.show()
编辑:

要将这些语句作为一个要选择的变量传递,请尝试以下操作:

checkcol = (F.when(F.col("colA") == 'null', "Yes").otherwise(date_validation_udf("colA")).alias("colA_DateCheck"),
            F.when(F.col("colB") == 'null', "Yes").otherwise(date_validation_udf("colB")).alias("colB_DateCheck"),
            F.when(F.col("colC") == 'null', "Yes").otherwise(date_validation_udf("colC")).alias("colC_DateCheck"),
            F.when(F.col("colD") == 'null', "Yes").otherwise(num_check_udf("colD")).alias("colD_NumCheck"),
            F.when(F.col("colE") == 'null', "Yes").otherwise(num_check_udf("colE")).alias("colE_NumCheck"),
            F.when(F.col("colF") == 'null', "Yes").otherwise(num_check_udf("colF")).alias("colF_NumCheck"),
            F.when(F.col("colG") == 'null', "Yes").otherwise(num_check_udf("colG")).alias("colG_NumCheck"))


df_output =  df.select(
          '*', 
           *checkcol
)

嗨,通过直接硬编码,它可以很好地工作。。但是我想将这些语句作为变量传递给它。hi@Amine,仍然会得到类似于df_w_output=df.select('*',*CheckCol)py4j.protocol.Py4JJavaError:调用z:org.apache.spark.sql.functions.col时出错:java.lang.StringIndexOutOfBoundsException:字符串索引超出范围:-1Hi@Amine,实际上我通过附加它从for循环获取checkcol值。。例如,对于zip中的i,j(日期数据,范围(日期计数)):如果j==(日期计数-1):检查F.when(F.col(“+i+”)==”+“'null',“+'”Yes”)。否则(日期验证udf(“+i+”)。别名(“+i+”)。否则:检查F.when(F.col(“+i+”=”=”+“+”=”+“+“+”)=”+“+“+”)=”+“+”,“+”)。否则(日期验证udf(“+i+”))。别名检查+”)=F.when(F.col(“+i+”)。如果我像上面提到的那样直接创建一个变量来执行它,它就会工作。。但当它从循环中选取值时失败。但是这两个值保持不变。这是什么语法?它是shell吗?需要在pyspark脚本中执行它。。通过调用其中的变量。
$
语法不是python。假设
checkcol
是一个
list
,我想你要找的是
df\u output=df。选择(*[df.columns+checkcol])
否,它是一个字符串。。df_w_output=df.select(*[df.columns+CheckCol])类型错误:只能将列表(而不是“str”)连接到列表