如何在 pyspark 数据框中将变量值分配为新列值?
Posted
技术标签:
【中文标题】如何在 pyspark 数据框中将变量值分配为新列值?【英文标题】:How to assign variable value as new column value in pyspark data-frame? 【发布时间】:2020-02-04 22:16:57 【问题描述】:我正在为从数据框中获取的变量赋值,如下所示:
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["*"])
所以我想在数据框中创建一个新列并将级别变量分配为新列值。我正在通过以下方式做到这一点,但没有成功:
ScoreCal1 = ScoreCal1.withColumn("Level",lit(level)))
如何在 pyspark 数据框中将变量分配为新列值?
【问题讨论】:
【参考方案1】:从您的代码中我注意到,级别似乎是数据框而不是变量。因此它会引发错误。
由于您指定如下,它只返回数据帧而不是变量:
level =dfScore .where((col("DataField") == "Amount")).select(dfScore ["level"])
但是我从您的代码中了解到,如果它满足以下条件 col("DataField") == "Amount" 否则为 Null,您希望使用旧列级别的值为新列“级别”分配值。如果是这样,您可以使用 when 条件编写代码,如下所示:
ScoreCal1 = ScoreCal1.withColumn("Level",when(col("DataField") == "Amount",dfScore ["level"]))
【讨论】:
感谢您的回答,但我想为新的 Dataframe 分配级别。更新了相关代码 因为 level 是一个数据框,你不能添加它是一个列。 lit 仅在您具有单个值时才有效,因为它在所有行中添加了相同的值。相反,如果两个数据帧都具有 common_id,您可以对它们使用连接操作,然后执行所需的分析。 是的,我做了同样的事情,使用了 lit 并从级别数据框中提供了字符串值并工作。以上是关于如何在 pyspark 数据框中将变量值分配为新列值?的主要内容,如果未能解决你的问题,请参考以下文章
在 PySpark 中将 Python Dict 转换为稀疏 RDD 或 DF
根据两个 pandas DataFrames 之间的条件为新列分配值
如何在pyspark数据框中添加多个带有when条件的新列?