首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用Python动态地从RDD中获取值?

如何使用Python动态地从RDD中获取值?
EN

Stack Overflow用户
提问于 2018-02-24 04:03:09
回答 1查看 714关注 0票数 1

下面是我们校园系统中一本书的样本记录。每一本书记录都是一个文本文件。我已将下列记录载入:

代码语言:javascript
运行
复制
books = sc.wholeTextFiles (file:///data/dir/*/*/*/”)     

这会给我一个RDD。RDD中的一个记录如下所示:

代码语言:javascript
运行
复制
[[‘Call No: 56CB',
  'Title:  Global Warming',
  'Type: Serial,
  'Database:  AWS898,',
 ‘Microfilm:  Y,',
  'Access:  Public ,',
]]

我试图提取RDD的4到N元组位置中的值。0到4个元组总是在那里。但是RDD可能缺少第5个元组和更高的元组,如下所示:

代码语言:javascript
运行
复制
[[‘Call No: 56CB',
  'Title:  Science 101',
  'Type: Serial,’
  'Database:  AWS898,',
   ‘Microfilm:  Y,',
]]

因此,代码必须灵活处理RDD的可变长度。我有下面的代码来获取4和5个元组,但是当RDD有4到15个元组时,这是不灵活的:

代码语言:javascript
运行
复制
Summary1 = books.map(lambda x: (x[4]))
Summary2 = books.map(lambda x: (x[5]))

我可以通过以下方法获得RDD的长度:

代码语言:javascript
运行
复制
LenRDD = books.map(lambda x: len(x)).collect()

您能帮我编写python代码吗?它可以动态地将我的第4部分转换为LenRDD元组吗?

下面是其中一个文件的示例:

代码语言:javascript
运行
复制
Call No: 56CB
Title:  Global Warming
Type: Serial
Database:  AWS894
Microfilm:  Y
Access:  Public
Location: Oxford
Size:  987 MB
Key:  677867IPOIO
EN

回答 1

Stack Overflow用户

发布于 2018-02-24 11:33:41

根据我从您的问题中了解到的,您正在尝试过滤掉每个文本文件的前4行,并在rdds中保留每个文件的其余行。如果我的理解是正确的,那么你应该像你正在做的那样阅读这些文件。

代码语言:javascript
运行
复制
books = sc.wholeTextFiles("file:///data/dir/*/*/*/")

然后编写一个函数,从数组中删除前四条记录。

代码语言:javascript
运行
复制
def delete(x):
    if(len(x)>4):
        for index in range(0,4):
            del x[0]
    return x

然后使用上面的函数从每个文本文件中删除前四行,并将其余的行作为rdd。

代码语言:javascript
运行
复制
summary1 = books.map(lambda x: delete(x[1].split("\n"))).map(lambda x: "\n".join(x))

你应该得到你想要的东西

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

https://stackoverflow.com/questions/48959246

复制
相关文章

相似问题

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