withclomn in pyspark error: TypeError: объект 'Column' не вызывается - PullRequest
0 голосов
/ 15 декабря 2018

Я использую spark 2.0.1,

 df.show()
+--------+------+---+-----+-----+----+
|Survived|Pclass|Sex|SibSp|Parch|Fare|
+--------+------+---+-----+-----+----+
|     0.0|   3.0|1.0|  1.0|  0.0| 7.3|
|     1.0|   1.0|0.0|  1.0|  0.0|71.3|
|     1.0|   3.0|0.0|  0.0|  0.0| 7.9|
|     1.0|   1.0|0.0|  1.0|  0.0|53.1|
|     0.0|   3.0|1.0|  0.0|  0.0| 8.1|
|     0.0|   3.0|1.0|  0.0|  0.0| 8.5|
|     0.0|   1.0|1.0|  0.0|  0.0|51.9|

У меня есть фрейм данных, и я хочу добавить новый столбец в df, используя withColumn, и значение нового столбца основывается на значении другого столбца.Я использовал что-то вроде этого:

>>> dfnew = df.withColumn('AddCol' , when(df.Pclass.contains('3.0'),'three').otherwise('notthree'))

Это дает ошибку

TypeError: 'Column' object is not callable

может помочь как преодолеть эту ошибку.

Ответы [ 2 ]

0 голосов
/ 15 декабря 2018

Это потому, что вы пытаетесь применить функцию contains к столбцу.Функция contains не существует в pyspark.Вы должны попробовать like.Попробуйте это:

import pyspark.sql.functions as F

df = df.withColumn("AddCol",F.when(F.col("Pclass").like("3"),"three").otherwise("notthree"))

Или, если вы просто хотите, чтобы это было точно число 3, вам следует сделать:

import pyspark.sql.functions as F

# If the column Pclass is numeric
df = df.withColumn("AddCol",F.when(F.col("Pclass") == F.lit(3),"three").otherwise("notthree"))

# If the column Pclass is string
df = df.withColumn("AddCol",F.when(F.col("Pclass") == F.lit("3"),"three").otherwise("notthree"))
0 голосов
/ 15 декабря 2018

Вы должны использовать df.col (colName) вместо df.colName

, например, использовать java 8 и spark 2.1:

df.show();

+--------+------+---+-----+-----+----+
|Survived|Pclass|Sex|SibSp|Parch|Fare|
+--------+------+---+-----+-----+----+
|       0|     3|  1|    1|    0|   3|
|       1|     1|  0|    1|    0|   2|
+--------+------+---+-----+-----+----+

df = df.withColumn("AddCol", when(df.col("Pclass").contains("3"),"three").otherwise("notthree"));

df.show();

+--------+------+---+-----+-----+----+--------+
|Survived|Pclass|Sex|SibSp|Parch|Fare|  AddCol|
+--------+------+---+-----+-----+----+--------+
|       0|     3|  1|    1|    0|   3|   three|
|       1|     1|  0|    1|    0|   2|notthree|
+--------+------+---+-----+-----+----+--------+
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...