多列上的pyspark条件并返回新列

Posted

技术标签:

【中文标题】多列上的pyspark条件并返回新列【英文标题】:pyspark conditions on multiple columns and returning new column 【发布时间】:2017-08-23 16:44:34 【问题描述】:

我使用的是 spark 2.1,脚本是 pyspark。请帮我解决这个问题,因为我被困在这里。

问题陈述:根据多个列的条件创建新列

输入dataframe在下方

FLG1 FLG2 FLG3

T     F     T

F     T     T

T     T     F

现在我需要创建一个新列作为 FLG,我的条件是如果 FLG1==T&&(FLG2==F||FLG2==T) 我的 FLG 必须是 T 否则 F

以上考虑dataframeDF

下面是我尝试过的代码sn-p

DF.withColumn("FLG",DF.select(when(FLG1=='T' and (FLG2=='F' or FLG2=='T','F').otherwise('T'))).show()

没有工作我在未定义时得到名字

请帮助我跨过这个障碍

【问题讨论】:

andor 在 pyspark 中不起作用 - 请参阅 issues.apache.org/jira/browse/SPARK-8568 【参考方案1】:

试试下面的,应该可以的

from pyspark.sql.functions import col, when, lit
DF.withColumn("FLG", when((col("FLG1")=='T') & ((col("FLG2")=='F') | (col("FLG2")=='T')),lit('F')).otherwise(lit('T'))).show()

【讨论】:

感谢拉梅什的快速回复。获取不支持的操作数类型 |: 'str' 和 'Dataframe' 可能是什么问题 我很高兴@user3292373 :) 感谢您的支持和接受 如果列正在增加并且条件现在正在增加,Ramesh 会再提供帮助。我需要创建一个在该 udf 中生成一列的 udf 我需要在作为参数传递的列上给出条件 我该怎么做。在传递的参数列上,条件被执行并返回为 true 或 false 。我该怎么做 你可以从***.com/questions/42540169/…得到想法

以上是关于多列上的pyspark条件并返回新列的主要内容,如果未能解决你的问题,请参考以下文章

Pyspark:过滤多列上的行

如何在 pyspark 中对 spark 数据框中的多列求和?

如何在 pyspark 中对 spark 数据框中的多列求和?

使用 pyspark 基于 if 和 else 条件创建新列

Pyspark:在UDF中传递多列以及参数

如何在条件下在pyspark上创建一个新列?