【问题标题】:Pandas Dataframe to RDD熊猫数据框到 RDD
【发布时间】:2015-11-12 11:17:29
【问题描述】:

我可以将 Pandas DataFrame 转换为 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'

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

【问题讨论】:

    标签: pandas apache-spark dataframe pyspark apache-spark-sql


    【解决方案1】:

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

    嗯,是的,你可以做到。熊猫数据框

    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 Data Frame 是一种本地数据结构。它在驱动程序本地存储和处理。没有数据分布或并行处理,也没有使用 RDD(因此没有rdd 属性)。与 Spark DataFrame 不同,它提供随机访问功能。

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

    如果这不可能,有没有人可以提供使用 Spark DF 的示例

    不是真的。对于 SO 来说,这是一个很广泛的话题。 Spark 有一个非常好的文档,Databricks 提供了一些额外的资源。对于初学者,请检查以下内容:

    【讨论】:

      猜你喜欢
      • 2020-06-03
      • 1970-01-01
      • 2014-02-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-20
      • 2015-06-10
      相关资源
      最近更新 更多