PySpark 拆分行并转换为 RDD
PySpark split rows and convert to RDD
我有一个 RDD,其中每个元素都具有以下格式
['979500797', ' 979500797,260973244733,2014-05-0402:05:12,645/01/105/9931,78,645/01/105/9931,a1,forward;979500797,260972593713,2014-05-0407:05:04,645/01/105/9931,22,645/01/105/863,a4,forward']
我想将它转换为另一个 RDD,这样键是相同的,即 979500797,但值是拆分 ';' 的结果.换句话说,最终输出应该是
[
['979500797', ' 979500797,260973244733,2014-05-0402:05:12,645/01/105/9931,78,645/01/105/9931,a1,forward']
['979500797','979500797,260972593713,2014-05-0407:05:04,645/01/105/9931,22,645/01/105/863,a4,forward']
]
我一直在尝试这样使用地图
df_feat3 = df_feat2.map(lambda (x, y):(x, y.split(';')))
但是好像不行
这里你需要的是flatMap
。 flatMap
采用 returns 序列的函数并连接结果。
df_feat3 = df_feat2.flatMap(lambda (x, y): ((x, v) for v in y.split(';')))
附带说明一下,我会避免使用元组参数。这是一个很酷的功能,但在 Python 3 中不再可用。参见 PEP 3113
我有一个 RDD,其中每个元素都具有以下格式
['979500797', ' 979500797,260973244733,2014-05-0402:05:12,645/01/105/9931,78,645/01/105/9931,a1,forward;979500797,260972593713,2014-05-0407:05:04,645/01/105/9931,22,645/01/105/863,a4,forward']
我想将它转换为另一个 RDD,这样键是相同的,即 979500797,但值是拆分 ';' 的结果.换句话说,最终输出应该是
[
['979500797', ' 979500797,260973244733,2014-05-0402:05:12,645/01/105/9931,78,645/01/105/9931,a1,forward']
['979500797','979500797,260972593713,2014-05-0407:05:04,645/01/105/9931,22,645/01/105/863,a4,forward']
]
我一直在尝试这样使用地图
df_feat3 = df_feat2.map(lambda (x, y):(x, y.split(';')))
但是好像不行
这里你需要的是flatMap
。 flatMap
采用 returns 序列的函数并连接结果。
df_feat3 = df_feat2.flatMap(lambda (x, y): ((x, v) for v in y.split(';')))
附带说明一下,我会避免使用元组参数。这是一个很酷的功能,但在 Python 3 中不再可用。参见 PEP 3113