我有一个pyspark DataFrame,其中包含名为primary_use
的列。
这里是第一行:
创建一个布尔向量,它将指示特定行中的primary_use
是Education
还是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'
您能解释结果并提出对代码的更正吗?
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']))