Pandas Dataframe to RDD

Можно ли преобразовать фреймворк Pandas в 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

Ответ 1

Можно ли преобразовать фреймворк Pandas в RDD?

Хорошо, да, вы можете это сделать. Pandas Кадры данных

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

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

может быть преобразован в Spark Data Frames

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 предоставляет дополнительные ресурсы. Для начала вы проверяете их: