Pyspark Удаление заголовка в кадре данных, AttributeError: _jdf - PullRequest
0 голосов
/ 11 мая 2018
from pyspark.sql import SQLContext
sqlContext = SQLContext(sc)

spark = sqlContext.sparkSession
avg_calc = spark.read.csv("quiz2_algo.csv", header= True,inferSchema=True)
header = avg_calc.first()
no_header = avg_calc.subtract(header)
no_header

avg_calc содержит 2 столбца, и я пытаюсь удалить 1-ую строку из обоих столбцов, однако я получаю следующую ошибку:

---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
<ipython-input-50-24671d91e691> in <module>()
----> 1 no_header = avg_calc.subtract(header)

C:\spark\spark-2.3.0-bin-hadoop2.7\python\pyspark\sql\dataframe.pyc in subtract(self, other)
   1391 
   1392         """
-> 1393         return DataFrame(getattr(self._jdf, "except")(other._jdf), self.sql_ctx)
   1394 
   1395     @since(1.4)

C:\spark\spark-2.3.0-bin-hadoop2.7\python\pyspark\sql\types.pyc in __getattr__(self, item)
   1559             raise AttributeError(item)
   1560         except ValueError:
-> 1561             raise AttributeError(item)
   1562 
   1563     def __setattr__(self, key, value):

AttributeError: _jdf

Если кто-то может помочь, я буду признателен!

enter image description here
Пример данных: avg_calc.show (5)

1 Ответ

0 голосов
/ 11 мая 2018

first() возвращает объект Row вместо DataFrame, который требуется для subtract.См. http://spark.apache.org/docs/latest/api/python/pyspark.sql.html#pyspark.sql.DataFrame.first

Вы можете попробовать что-то вроде:

avg_calc.subtract(avg_calc.limit(1))

Например:

>>> df = spark.createDataFrame([Row(x=1), Row(x=2)])
>>> print(df.subtract(df.limit(1)).toPandas())
   x
0  2

Применить заказ к вашему фрейму данныхубедитесь, что строка, которую вы хотите удалить, находится в правильном месте:

>>> from pyspark.sql import functions as F
>>> df = df.orderBy(F.col('CS202 Quiz#2').desc())
>>> df = df.subtract(df.limit(1))
...