打印ResultIterable对象的内容

时间:2016-10-14 12:54:02

标签: apache-spark pyspark

如何打印包含行和列列表的pyspark.resultiterable.ResultIterable对象的内容

是否有内置功能?

我想要dataframe.show()

之类的东西

enter image description here

1 个答案:

答案 0 :(得分:5)

我面对同样的问题并最终解决了,所以让我分享一下这样做的方式......

我们假设我们有两个RDD。

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

让我们合并这些RDD以获得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'))

希望这将有助于将来的某些人。