2016-10-14 104 views
2

我如何可以打印具有行和列打印ResultIterable對象的內容

是否有一個內置的函數,該函數列表的pyspark.resultiterable.ResultIterable對象的內容?

我想是這樣dataframe.show()

enter image description here

+0

你可以添加一些代碼嗎? –

+1

你有沒有機會接受我的答案? :) – ezamur

回答

4

我面臨同樣的問題,解決它最終,所以讓我分享我做這件事的方法...

讓我們假設我們有兩個RDD。

rdd1 = sc.parallelize([(1,'A'),(2,'B'),(3,'C')]) 
rdd2 = sc.parallelize([(1,'a'),(2,'b'),(3,'c')]) 

讓我們對這些RDD進行cogroup以獲得ResultIterable。

cogrouped = rdd1.cogroup(rdd2) 
for t in cogrouped.collect(): 
    print t 

>> 
(1, (<pyspark.resultiterable.ResultIterable object at 0x107c49450>, <pyspark.resultiterable.ResultIterable object at 0x107c95690>)) 
(2, (<pyspark.resultiterable.ResultIterable object at 0x107c95710>, <pyspark.resultiterable.ResultIterable object at 0x107c95790>)) 
(3, (<pyspark.resultiterable.ResultIterable object at 0x107c957d0>, <pyspark.resultiterable.ResultIterable object at 0x107c95810>)) 

現在我們想看看這些ResultIterables裏面有什麼。 我們可以做這樣的:

def iterate(iterable): 
    r = [] 
    for v1_iterable in iterable: 
     for v2 in v1_iterable: 
      r.append(v2) 

    return tuple(r) 

x = cogrouped.mapValues(iterate) 
for e in x.collect(): 
    print e 

或類似這樣的

def iterate2(iterable): 
    r = [] 
    for x in iterable.__iter__(): 
     for y in x.__iter__(): 
      r.append(y) 
    return tuple(r) 

y = cogrouped.mapValues(iterate2) 
for e in y.collect(): 
    print e 

在這兩種情況下,我們會得到相同的結果:

(1, ('A', 'a')) 
(2, ('B', 'b')) 
(3, ('C', 'c')) 

希望,這將有助於在未來的人。