Почему мои выражения столбца Dataframe не работают? - PullRequest
0 голосов
/ 02 декабря 2018

Учитывая DataFrame df, когда я делаю

df.select(df['category_id']+1000), я получаю результаты

>>> df.select(df['category_id']).limit(3).show()
+-----------+
|category_id|
+-----------+
|          1|
|          2|
|          3|
+-----------+

>>> df.select(df['category_id']+1000).limit(3).show()
+--------------------+
|(category_id + 1000)|
+--------------------+
|                1001|
|                1002|
|                1003|
+--------------------+

Однако, когда я делаю df.select(df['category_name']+ ' blah'), получаю null

>>> df.select(df['category_name']).limit(3).show()
+-------------------+
|      category_name|
+-------------------+
|           Football|
|             Soccer|
|Baseball & Softball|
+-------------------+

>>> df.select(df['category_name']+'blah').limit(3).show()
+----------------------+
|(category_name + blah)|
+----------------------+
|                  null|
|                  null|
|                  null|
+----------------------+

Просто интересно, что заставляет одного работать, а другого нет?Чего мне не хватает?

1 Ответ

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

В отличие от python, оператор + не определен как конкатенация строк в spark (и sql не делает этого тоже), вместо этого он имеет concat/concat_ws для конкатенации строк.

import pyspark.sql.functions as f

df.select(f.concat(df.category_name, f.lit('blah')).alias('category_name')).show(truncate=False)
#+-----------------------+
#|category_name          |
#+-----------------------+
#|Footballblah           |
#|Soccerblah             |
#|Baseball & Softballblah|
#+-----------------------+

df.select(f.concat_ws(' ', df.category_name, f.lit('blah')).alias('category_name')).show(truncate=False)
#+------------------------+
#|category_name           |
#+------------------------+
#|Football blah           |
#|Soccer blah             |
#|Baseball & Softball blah|
#+------------------------+
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...