Python 如何在pyspark数据框中将变量值指定为新列值?

Python 如何在pyspark数据框中将变量值指定为新列值?,python,azure,apache-spark,pyspark,databricks,Python,Azure,Apache Spark,Pyspark,Databricks,我为从数据帧获取的变量赋值,如下所示: dfScore = spark.read.format("csv").option("header", "true").load("data.csv") level = dfScore.where((col("Name") == "Rule1")).select(dfScore ["level"]) 然后我有另一个数据帧,我必须向其中添加此级别变量值: dfJson = spark.read.format("json").lo

我为从数据帧获取的变量赋值,如下所示:

    dfScore =  spark.read.format("csv").option("header", "true").load("data.csv")

    level = dfScore.where((col("Name") == "Rule1")).select(dfScore ["level"])   
然后我有另一个数据帧,我必须向其中添加此级别变量值:

dfJson =  spark.read.format("json").load("/mnt/coi/Rule/Rule1.json")

 ScoreCal1 = dfJson.where((dfJson["Amount"] > 20000)).select(dfJson["*"])
所以我想在dataframe中创建一个新列,并将level变量指定为新列值。我以以下方式进行,但没有成功:

ScoreCal1 = ScoreCal1.withColumn("Level",lit(level)))
如何在pyspark dataframe中将变量指定为新列值


从您的代码中我注意到,level似乎是dataframe,而不是一个变量。因此,它抛出了错误

由于您指定如下,它只返回dataframe而不返回变量:

level =dfScore .where((col("DataField") == "Amount")).select(dfScore ["level"])
但是,我从代码中了解到,如果新列级别满足以下条件colDataField==Amount else Null,则需要为其赋值,并使用旧列级别的值。如果是这样,您可以使用以下when条件编写代码:

ScoreCal1 = ScoreCal1.withColumn("Level",when(col("DataField") == "Amount",dfScore ["level"]))

感谢您的回答,但我想为新的数据帧分配级别。更新了问题中的代码,因为级别是数据帧,所以不能将其添加为列。lit仅在具有单个值时工作,因为它在所有行中添加相同的值。相反,如果两个数据帧都有公共id,则可以对它们使用联接操作,然后执行所需的分析。是的,我也这样做了,使用了lit并从级别数据帧向其提供了字符串值,并且工作正常。