在pyspark中使用foreach()

问题描述 投票:1回答:1

我有一个pyspark DataFrame,其中包含名为primary_use的列。

这里是第一行:

enter image description here

创建一个布尔向量,它将指示特定行中的primary_useEducation还是Office,我正在使用以下代码。但是,它返回None导致异常:

def is_included_in(row):

    return(row['primary_use'] in ['Education', 'Office'])

building.foreach(is_included_in).show()

---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
<ipython-input-124-03dd626371bf> in <module>
----> 1 building.foreach(is_included_in).show()

AttributeError: 'NoneType' object has no attribute 'show'

您能解释结果并提出对代码的更正吗?

python-3.x foreach pyspark-sql
1个回答
0
投票

pyspark foreach不会产生新的转换后的数据帧。 Foreach允许遍历每条记录并执行一些不可返回的操作-例如写入磁盘或调用某些外部api

也该函数实际调用df.rdd.foreach。 Rdd是基础数据框api。它是较低的级别。转换每个记录的正确rdd api是Rdd.map

dataframe api还提供了运行标量映射用户定义函数的可能性。最新的是pandas udf

此类isin函数已经是标准Spark sql API的一部分。

df = df.withColumn('is_included', df.primary_use.isin(['Education', 'Office']))
© www.soinside.com 2019 - 2024. All rights reserved.