我在pyspark中有一个DataFrame(df),通过从hive表中读取:
df=spark.sql('select * from <table_name>')
+++++++++++++++++++++++++++++++++++++++++++
| Name | URL visited |
+++++++++++++++++++++++++++++++++++++++++++
| person1 | [google,msn,yahoo] |
| person2 | [fb.com,airbnb,wired.com] |
| person3 | [fb.com,google.com] |
+++++++++++++++++++++++++++++++++++++++++++
Run Code Online (Sandbox Code Playgroud)
当我尝试以下,得到一个错误
df_dict = dict(zip(df['name'],df['url']))
"TypeError: zip argument #1 must support iteration."
Run Code Online (Sandbox Code Playgroud)
type(df.name) is of 'pyspark.sql.column.Column'
我如何创建如下的字典,以后可以迭代
{'person1':'google','msn','yahoo'}
{'person2':'fb.com','airbnb','wired.com'}
{'person3':'fb.com','google.com'}
Run Code Online (Sandbox Code Playgroud)
感谢您的想法和帮助.
Cos*_*min 11
我想你可以尝试row.asDict(),这个代码直接在执行程序上运行,你不必收集驱动程序上的数据.
就像是:
df.rdd.map(lambda row: row.asDict())
Run Code Online (Sandbox Code Playgroud)
use*_*332 10
使用pysparkRow.as_Dict()方法怎么样?这是数据帧 API 的一部分(据我所知是撰写本文时的“推荐”API)并且根本不需要您使用 RDD API。
df_list_of_dict = [row.asDict() for row in df.collect()]
type(df_list_of_dict), type(df_list_of_dict[0])
#(<class 'list'>, <class 'dict'>)
df_list_of_dict
#[{'person1': ['google','msn','yahoo']},
# {'person2': ['fb.com','airbnb','wired.com']},
# {'person3': ['fb.com','google.com']}]
Run Code Online (Sandbox Code Playgroud)
如果您希望将结果保存在 Python 字典中,您可以使用collect()1将数据放入本地内存,然后根据需要处理输出。
首先收集数据:
df_dict = df.collect()
#[Row(Name=u'person1', URL visited=[u'google', u'msn,yahoo']),
# Row(Name=u'person2', URL visited=[u'fb.com', u'airbnb', u'wired.com']),
# Row(Name=u'person3', URL visited=[u'fb.com', u'google.com'])]
Run Code Online (Sandbox Code Playgroud)
这将返回一个pyspark.sql.Row对象列表。您可以轻松地将其转换为dicts列表:
df_dict = [{r['Name']: r['URL visited']} for r in df_dict]
#[{u'person1': [u'google', u'msn,yahoo']},
# {u'person2': [u'fb.com', u'airbnb', u'wired.com']},
# {u'person3': [u'fb.com', u'google.com']}]
Run Code Online (Sandbox Code Playgroud)
1请注意,对于大型数据集,此操作可能会很慢,并且可能会因内存不足错误而失败。您应该首先考虑这是否是您真正想要做的事情,因为将数据放入本地内存会失去 spark 的并行化优势。
| 归档时间: |
|
| 查看次数: |
9455 次 |
| 最近记录: |