以下是校园系统中图书的样本记录。每本书记录都是一个文本文件。我用以下内容加载了记录:
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代码,让我动态地获得第四代LenRDD元组吗?
以下是其中一个文件的示例:
Call No: 56CB
Title: Global Warming
Type: Serial
Database: AWS894
Microfilm: Y
Access: Public
Location: Oxford
Size: 987 MB
Key: 677867IPOIO
答案 0 :(得分:0)
根据我对你的问题的理解,你试图过滤掉每个文本文件的前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))
你应该得到你想要的东西