如何解决如何以这种方式过滤数据框以将 True 或 False 返回到 Pyspark 中的某个条件?
我想创建一个返回 False 或 True 到特定条件的数据框,它将替换 Pandas 中的内置函数 .all
。我提供了一个预期的结果。提前致谢!
schema = StructType([
StructField( 'vin',StringType(),True),StructField( 'age',IntegerType(),StructField( 'var',StructField( 'rim',StructField( 'cap',StructField( 'cur',True)
])
data = [['tom',10,54,87,23,90],['nick',15,63,11,65],['juli',14,9,43,21]]
df=spark.createDataFrame(data,schema)
df.show()
>>>
+----+---+---+---+---+---+
| vin|age|var|rim|cap|cur|
+----+---+---+---+---+---+
| tom| 10| 54| 87| 23| 90|
|nick| 15| 63| 23| 11| 65|
|juli| 14| 87| 9| 43| 21|
+----+---+---+---+---+---+
col_2=['age','var','rim']
df=df.select(*col_2)
df.show()
>>>
+---+---+---+
|age|var|rim|
+---+---+---+
| 10| 54| 87|
| 15| 63| 23|
| 14| 87| 9|
+---+---+---+
df=df.filter(F.col(*col_2) ==10)
#Expected outcome:
>>>
+---===+------+------+
|age |var |rim |
+------+------+------+
| True | False| False|
| False| False| False|
| False| False| False|
+------+------+------+
解决方法
您可以对每一列进行比较并选择所有列。不需要 filter
。
import pyspark.sql.functions as F
df2 = df.select([(F.col(c) == 10).alias(c) for c in col_2])
df2.show()
+-----+-----+-----+
| age| var| rim|
+-----+-----+-----+
| true|false|false|
|false|false|false|
|false|false|false|
+-----+-----+-----+
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。