首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >拆分句子,并按键对每个值进行分组

拆分句子,并按键对每个值进行分组
EN

Stack Overflow用户
提问于 2019-05-05 01:39:31
回答 2查看 128关注 0票数 0

我有一个以下格式的输入数据,我正在尝试拆分它并创建一个键值对:

输入:

代码语言:javascript
复制
"SQL",1,2,3,4,5
"ORACLE",2,5,6,7

要写入RDD的目标数据:

代码语言:javascript
复制
SQL,1
SQL,2
SQL,3
SQL,4
SQL,5
ORACLE,2
ORACLE,5
ORACLE,6
ORACLE,7

我正在尝试使用以下代码创建键-值对,但该代码不起作用

代码语言:javascript
复制
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)
EN

回答 2

Stack Overflow用户

发布于 2019-05-05 02:26:38

输入数据:

代码语言:javascript
复制
inp = '''"SQL",1,2,3,4,5
"ORACLE",2,5,6,7'''

代码:

代码语言:javascript
复制
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元素来跳过第一个元素:

代码语言:javascript
复制
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)

输出:

代码语言:javascript
复制
[('SQL', '1'), ('SQL', '2'), ('SQL', '3'), ('SQL', '4'), ('SQL', '5'), ('ORACLE', '2'), ('ORACLE', '5'), ('ORACLE', '6'), ('ORACLE', '7')]

如果您想以您提供的格式将它们收集到字符串列表中,只需替换

代码语言:javascript
复制
res.extend((key, v) for v in values[1:])

使用

代码语言:javascript
复制
res.extend('{},{}'.format(key, v) for v in values[1:])
票数 0
EN

Stack Overflow用户

发布于 2019-05-05 10:50:19

使用flatMap()

代码语言:javascript
复制
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')]

地址:

  1. [row.replace('"','').split(',', 1)]将像SQL这样的行转换为包含两个元素

  1. [row.replace('"','').split(',', 1)]的列表,然后将第二个项目拆分成一个新的列表,然后通过flatMap()

展平具有(k,v)元组的列表理解(k,v)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55985226

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档