2015-08-19 197 views
10

我可以将熊猫数据框转换为RDD吗?熊猫数据框到RDD

if isinstance(data2, pd.DataFrame): 
    print 'is Dataframe' 
else: 
    print 'is NOT Dataframe' 

是数据框

这里是我在尝试使用.rdd

dataRDD = data2.rdd 
print dataRDD 

AttributeError       Traceback (most recent call last) 
<ipython-input-56-7a9188b07317> in <module>() 
----> 1 dataRDD = data2.rdd 
     2 print dataRDD 

/usr/lib64/python2.7/site-packages/pandas/core/generic.pyc in __getattr__(self, name) 
    2148     return self[name] 
    2149    raise AttributeError("'%s' object has no attribute '%s'" % 
-> 2150         (type(self).__name__, name)) 
    2151 
    2152  def __setattr__(self, name, value): 

AttributeError: 'DataFrame' object has no attribute 'rdd' 

我想用大熊猫数据帧,而不是sqlContext建立,因为我不知道是否所有的输出Pandas DF的功能在Spark中可用。如果这是不可能的,有没有人可以提供使用Spark DF的示例

回答

14

我可以将熊猫数据帧转换为RDD吗?

嗯,是的,你可以做到这一点。熊猫数据帧

pdDF = pd.DataFrame([("foo", 1), ("bar", 2)], columns=("k", "v")) 
print pdDF 

##  k v 
## 0 foo 1 
## 1 bar 2 

可以转换成星火数据帧

spDF = sqlContext.createDataFrame(pdDF) 
spDF.show() 

## +---+-+ 
## | k|v| 
## +---+-+ 
## |foo|1| 
## |bar|2| 
## +---+-+ 

之后,你可以轻松地访问底层RDD

spDF.rdd.first() 

## Row(k=u'foo', v=1) 

不过,我认为你有一个错误的观念在这里。熊猫数据框架是一个本地数据结构。它在驱动程序中进行本地存储和处理。没有数据分配或并行处理,并且不使用RDD(因此没有rdd属性)。与Spark DataFrame不同,它提供了随机访问功能。

Spark DataFrame是在幕后使用RDD的分布式数据结构。它可以使用原始SQL(sqlContext.sql)或SQL like API(df.where(col("foo") == "bar").groupBy(col("bar")).agg(sum(col("foobar"))))访问。没有随机访问,它是不可变的(没有相当于Pandas inplace)。每个转换都会返回新的DataFrame。

如果这是不可能的,是有任何人可以提供使用星火DF

没有真正的一个例子。对于SO来说,这是一个广泛的话题。 Spark有一个非常好的文档,Databricks提供了一些额外的资源。对于初学者来说,你检查这些:

+0

'spDF.show()'你把它在你的脚本的时间未定 – redress