我有一个pyspark DataFrame,我希望得到一个特定的列并迭代它的值。例如:
userId itemId
1 2
2 2
3 7
4 10
我按df.userId
获取userId列,对于此列中的每个userId,我想应用一个方法。我怎样才能做到这一点?
答案 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|
+------+------+---------------+