我有一个以下格式的输入数据,我正在尝试拆分它并创建一个键值对:
输入:
"SQL",1,2,3,4,5
"ORACLE",2,5,6,7要写入RDD的目标数据:
SQL,1
SQL,2
SQL,3
SQL,4
SQL,5
ORACLE,2
ORACLE,5
ORACLE,6
ORACLE,7我正在尝试使用以下代码创建键-值对,但该代码不起作用
data_rdd = f.zipWithIndex() \
.map(lambda row: (row[0].replace('"', '').split(',')[0], (dst for dst in row[1:len(row[0])]))) \
.aggregateByKey([], lambda a, b: a + [b], lambda a, b: a + b)发布于 2019-05-05 02:26:38
输入数据:
inp = '''"SQL",1,2,3,4,5
"ORACLE",2,5,6,7'''代码:
res = []
for line in inp.splitlines():
values = line.split(',')
key = values[0].replace('"', '')
res.extend((key, v) for v in values[1:])
print(res)注意:它会创建一个没有第一个元素的values副本来跳过它。
您还可以通过索引访问values元素来跳过第一个元素:
res = []
for line in inp.splitlines():
values = line.split(',')
key = values[0].replace('"', '')
res.extend((key, values[i]) for i in range(1, len(values)))
print(res)输出:
[('SQL', '1'), ('SQL', '2'), ('SQL', '3'), ('SQL', '4'), ('SQL', '5'), ('ORACLE', '2'), ('ORACLE', '5'), ('ORACLE', '6'), ('ORACLE', '7')]如果您想以您提供的格式将它们收集到字符串列表中,只需替换
res.extend((key, v) for v in values[1:])使用
res.extend('{},{}'.format(key, v) for v in values[1:])发布于 2019-05-05 10:50:19
使用flatMap()
data_rdd.flatMap(lambda row: [
(k, v) for k, vs in [row.replace('"','').split(',', 1)] for v in vs.split(',')
]).collect()
#[('SQL', '1'),
# ('SQL', '2'),
# ('SQL', '3'),
# ('SQL', '4'),
# ('SQL', '5'),
# ('ORACLE', '2'),
# ('ORACLE', '5'),
# ('ORACLE', '6'),
# ('ORACLE', '7')]地址:
[row.replace('"','').split(',', 1)]将像SQL这样的行转换为包含两个元素和
[row.replace('"','').split(',', 1)]的列表,然后将第二个项目拆分成一个新的列表,然后通过flatMap()展平具有(k,v)元组的列表理解(k,v)
https://stackoverflow.com/questions/55985226
复制相似问题