【发布时间】:2019-09-25 05:50:53
【问题描述】:
我正在尝试扁平化 RDD 中的数据。 RDD 的结构是一个 4 元组列表,第一个元素 - primary_id ,第二个元素 - 字典列表,第三和第四个元素分别包含一个包含字典的列表。
rdd= [('xxxxx99', [{'cov_id':'Q', 'cov_cd':'100','cov_amt':'100', 'cov_state':'AZ'},
{'cov_id':'Q', 'cov_cd':'33','cov_amt':'200', 'cov_state':'AZ'},
{'cov_id':'Q', 'cov_cd':'64','cov_amt':'10', 'cov_state':'AZ'}],
[{'pol_cat_id':'234','pol_dt':'20100220'}],
[{'qor_pol_id':'23492','qor_cd':'30'}]),
('xxxxx86', [{'cov_id':'R', 'cov_cd':'20','cov_amt':'100', 'cov_state':'TX'},
{'cov_id':'R', 'cov_cd':'44','cov_amt':'500', 'cov_state':'TX'},
{'cov_id':'R', 'cov_cd':'66','cov_amt':'50', 'cov_state':'TX'}],
[{'pol_cat_id':'532','pol_dt':'20091020'}],
[{'qor_pol_id':'49320','qor_cd':'21'}]) ]
我想展平数据,使其以格式显示
我将如何在 Pyspark 中执行此操作?
这是我尝试过的,但这给了我一个错误:要解包的元组太多
def flatten_map(record):
try:
yield(record)
# Unpack items
id, items, line, pls = record
pol_id = pls["pol_cat_id"]
pol_dt = pls["pol_dt"]
qor_id = pls["qor_pol_id"]
for item in items:
yield (id,item["cov_id"],item["cov_cd"], item["cov_amt"], item["cov_state"], pol_id, pol_dt, qor_id), 1
except Exception as e:
pass
result = (rdd
# Expand data
.flatMap(flatten_map)
# Flatten tuples
.map(lambda x: x[0], ))
如果需要,我可以发布完整的错误,但为了简洁起见,
ValueError: too many values to unpack (expected 2)
注意:转换为 pandas 不起作用,因为 RDD 太大
【问题讨论】:
-
修复了它……但这并没有导致错误
-
@jxc 完成。你介意支持我的问题吗?
标签: python apache-spark pyspark rdd