我有一个rdd,字符串列表是['abc','ccd','xyz'...'axd']
当我“打印rdd.take(2)时,我希望它能让我回复['abc','ccd'],但相反它给了我一切。我很新兴火花或蟒蛇所以请原谅我如果这是一个愚蠢的问题。有没有办法将这个列表转换成行?
最终我需要将其转换为数据帧并插入到hive表中。
这是我的代码的一部分
domainsrdd = zonerdd.reduceByKey(lambda x,y: x + ' ' + y).map(lambda a: (a[0], a[1].split(' ')))
print domainsrdd.take(2)
[(u'COOL', [u'shirtmaker.cool', u'videocandy.cool', u'the-happy-factory.cool', u'vic.cool', u'atl.cool',...... u'booze.cool'])]
def sampler(l, tldvar):
tld = l[0]
domain_data = l[1]
domains = []
ct = tldvar.value[tld]
for item in domain_data:
domains.extend([item])
if len(domains) == ct:
break
return domains
domainslist = domainsrdd.map(lambda l: sampler(l, tldvar))
print domainslist.take(2) # still returns everything
[[u'shirtmaker.cool', u'videocandy.cool', u'the-happy-factory.cool',...])]
长话短说,我试图循环通过一组由tld组成的域并生成这些域名的样本,tldvar是一个字典,其中包含我需要为特定tld返回的域集。 TLD = com,net,org等!
答案 0 :(得分:0)
domainslist
的类型为RDD[Array[String]]
,因此当您执行take
时,您将获得Array[Array[String]]
。在您的情况下,根据您所说的内容(len(domains) == ct
永远不会true
)来填充数组永远不会受到限制
答案 1 :(得分:0)
这已解决 - 我使用的是flatmap而不是map。基本上这工作
domainslist = domainsrdd.flatmap(lambda l: sampler(l, tldvar))