如何将含pyspark.sql.types.Row的字典转换为userid列表?
提取PySpark Row列表中的userid值
嘿,这事儿其实挺容易搞定的,给你两种实用的方法,看你具体的场景来选:
方法一:Python列表推导式(适合已收集到本地的Row列表)
如果你的数据已经是像你给出的那样,是存在字典里的Row对象列表,直接用Python的列表推导式遍历每个Row,提取userid就行——Row对象既支持属性访问,也支持字典式的键访问,两种写法都可以:
# 先定义你的数据源 from pyspark.sql import Row data = {'ID': [Row(userid=17562323, gross_merchandise_value=6072210944, country=u'ID'), Row(userid=29989283, gross_merchandise_value=4931252224, country=u'ID')]} # 方式1:属性访问 userid_list = [row.userid for row in data['ID']] # 方式2:字典式访问(和属性访问效果一致) userid_list = [row['userid'] for row in data['ID']] print(userid_list) # 输出结果: [17562323, 29989283]
方法二:Spark原生API(适合大数据量,不想收集到Driver端)
如果你的数据还在Spark DataFrame里,还没调用collect()拿到本地的Row列表,那推荐用Spark的内置函数处理,避免把大量数据拉到Driver端造成内存压力:
from pyspark.sql.functions import collect_list # 假设df是包含userid列的原始DataFrame # 先聚合所有userid到一个列表里 userid_agg_df = df.select(collect_list("userid").alias("userid_list")) # 再收集结果到本地 userid_list = userid_agg_df.collect()[0]['userid_list']
两种方法都能得到你想要的结果,根据你的实际数据场景选就行~
内容的提问来源于stack exchange,提问作者Frank
相关产品推荐
相关产品推荐

