如何迭代pyspark.sql.Column?

时间:2017-10-04 08:50:01

标签: python pyspark

我有一个pyspark DataFrame,我希望得到一个特定的列并迭代它的值。例如:

userId    itemId
1         2
2         2
3         7
4         10

我按df.userId获取userId列,对于此列中的每个userId,我想应用一个方法。我怎样才能做到这一点?

1 个答案:

答案 0 :(得分:0)

您的问题对于要应用的函数类型并不是非常具体,因此我创建了一个示例,该示例根据itemId的值添加项目描述。

首先让我们导入相关的库并创建数据:

from pyspark.sql.functions import udf
from pyspark.sql.types import StringType

df = spark.createDataFrame([(1,2),(2,2),(3,7),(4,10)], ['userId', 'itemId'])

其次,创建函数并将其转换为可由PySpark使用的UDF函数:

def item_description(itemId):
    items = {2  : "iPhone 8",
             7  : "Apple iMac",
             10 : "iPad"}
    return items[itemId]

item_description_udf = udf(item_description,StringType())

最后,为ItemDescription添加一个新列,并使用item_description_udf函数返回的值填充它:

df = df.withColumn("ItemDescription",item_description_udf(df.itemId))    
df.show()

这给出了以下输出:

+------+------+---------------+
|userId|itemId|ItemDescription|
+------+------+---------------+
|     1|     2|       iPhone 8|
|     2|     2|       iPhone 8|
|     3|     7|     Apple iMac|
|     4|    10|           iPad|
+------+------+---------------+