下面是我们校园系统中一本书的样本记录。每一本书记录都是一个文本文件。我已将下列记录载入:
books = sc.wholeTextFiles (file:///data/dir/*/*/*/”)
这会给我一个RDD。RDD中的一个记录如下所示:
[[‘Call No: 56CB',
'Title: Global Warming',
'Type: Serial,
'Database: AWS898,',
‘Microfilm: Y,',
'Access: Public ,',
]]
我试图提取RDD的4到N元组位置中的值。0到4个元组总是在那里。但是RDD可能缺少第5个元组和更高的元组,如下所示:
[[‘Call No: 56CB',
'Title: Science 101',
'Type: Serial,’
'Database: AWS898,',
‘Microfilm: Y,',
]]
因此,代码必须灵活处理RDD的可变长度。我有下面的代码来获取4和5个元组,但是当RDD有4到15个元组时,这是不灵活的:
Summary1 = books.map(lambda x: (x[4]))
Summary2 = books.map(lambda x: (x[5]))
我可以通过以下方法获得RDD的长度:
LenRDD = books.map(lambda x: len(x)).collect()
您能帮我编写python代码吗?它可以动态地将我的第4部分转换为LenRDD元组吗?
下面是其中一个文件的示例:
Call No: 56CB
Title: Global Warming
Type: Serial
Database: AWS894
Microfilm: Y
Access: Public
Location: Oxford
Size: 987 MB
Key: 677867IPOIO
发布于 2018-02-24 11:33:41
根据我从您的问题中了解到的,您正在尝试过滤掉每个文本文件的前4行,并在rdds中保留每个文件的其余行。如果我的理解是正确的,那么你应该像你正在做的那样阅读这些文件。
books = sc.wholeTextFiles("file:///data/dir/*/*/*/")
然后编写一个函数,从数组中删除前四条记录。
def delete(x):
if(len(x)>4):
for index in range(0,4):
del x[0]
return x
然后使用上面的函数从每个文本文件中删除前四行,并将其余的行作为rdd。
summary1 = books.map(lambda x: delete(x[1].split("\n"))).map(lambda x: "\n".join(x))
你应该得到你想要的东西
https://stackoverflow.com/questions/48959246
复制相似问题