Pandas数据框架到RDD



我可以将Pandas DataFrame转换为RDD吗?

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

是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'

我想使用Pandas Dataframe而不是sqlContext来构建,因为我不确定Pandas DF中的所有功能是否在Spark中可用。如果这是不可能的,有没有人可以提供一个使用Spark DF

的例子?

我可以将一个Pandas数据框转换为RDD吗?

嗯,是的,你可以做到。Pandas数据框架

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

可以转换为Spark数据帧

spDF = sqlContext.createDataFrame(pdDF)
spDF.show()
## +---+-+
## |  k|v|
## +---+-+
## |foo|1|
## |bar|2|
## +---+-+

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

spDF.rdd.first()
## Row(k=u'foo', v=1)
尽管如此,我还是认为你的想法是错误的。Pandas数据框架是一个本地数据结构。它在驱动程序上进行本地存储和处理。没有数据分布或并行处理,也不使用rdd(因此没有rdd属性)。与Spark DataFrame不同,它提供随机访问功能。

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

如果这是不可能的,有没有人可以提供一个使用Spark DF的例子

没有。这个话题对SO来说太宽泛了。Spark有非常好的文档,Databricks提供了一些额外的资源。对于初学者,您可以检查以下内容:

    在Spark中引入dataframe用于大规模数据科学
  • Spark SQL和DataFrame指南

相关内容

  • 没有找到相关文章

最新更新