2015-07-13 4 views
0

У меня есть РД, где список строк являются [ «ABC», «ПЗС-», «хуга» ... «AXD»]Как Транспонирование РДА в pyspark (список не является матрицей)

Когда я «печатаю rdd.take (2), я ожидаю, что он вернет меня ['abc', 'ccd'], но вместо этого он дает мне все. Я очень новичок в искры или питоне, поэтому, пожалуйста, простите меня, если это немой вопрос. есть способ перенести этот список строк?

в конце концов, мне нужно, чтобы преобразовать это в dataframe и вставить в улей таблицу.

Вот пайса моего кода

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

take (n) всегда возвращает первые n элементов набора данных. Возможно, вы вызвали метод collect(), поскольку весь набор данных, кажется, был возвращен. Не могли бы вы добавить пример кода в свой пост? – kkaosninja

+0

Только что обновил форматирование –

ответ

0

domainslist имеет тип RDD[Array[String]], поэтому, когда вы делаете take, вы получите Array[Array[String]]. Который в вашем случае заполнен массивами, которые никогда не ограничены в зависимости от того, что вы говорите (len(domains) == ct is never true)

0

Это решение - я использовал карту вместо карты. В основном это сработало

domainslist = domainsrdd.flatmap(lambda l: sampler(l, tldvar)) 
Смежные вопросы