python - 从 df 列的列表中过滤期望值
问题描述
我有一个包含以下列的数据框:
raw_col
['a','b','c']
['b']
['a','b']
['c']
我想根据条件语句返回具有单个值的列。我写了以下函数:
def filter_func(elements):
if "a" in elements:
return "a"
else:
return "Other"
在列上运行函数时df.withColumn("col", filter_func("raw_col"))
出现以下错误col should be Column
这里有什么问题?我应该怎么办?
解决方案
您可以使用array_contains
功能:
import pyspark.sql.functions as f
df = df.withColumn("col", f.when(f.array_contains("raw_col", f.lit("a")), f.lit("a")).otherwise(f.lit("Other")))
但是如果你有一个复杂的逻辑并且需要使用filter_func
,则需要创建一个 UDF:
@f.udf()
def filter_func(elements):
if "a" in elements:
return "a"
else:
return "Other"
df = df.withColumn("col", filter_func("raw_col"))
推荐阅读
- javascript - 在 Node.js res.render 中同时渲染两个不同查询的结果
- python - 如何从列表组件中制作字典 - python
- apache-spark - 将新的拟合阶段添加到现有的 PipelineModel 而无需再次拟合
- neo4j - Neo4J 仅获取每个节点的第一个关系
- javascript - 无法使用等待 mongodb 查询中的变量
- algorithm - 这个算法的(大 O)复杂度是多少?
- matplotlib - yticks() 中的 Matplotlib 开发应用程序问题
- django - Django 和 AWS S3:对错误 URL 的静态文件请求
- bash - 需要 Powershell base64 编码
- linux - 我的 Bacula 传输率非常低。我如何配置导演来改善这一点?