pyspark - 为什么我的 Dataframe 列表达式不起作用?
问题描述
给定一个 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|
+----------------------+
只是想知道是什么让一个工作而另一个不工作?我错过了什么?
解决方案
与 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|
#+------------------------+
推荐阅读
- excel - 从范围 A 复制到范围 B 并且不要覆盖 B 中的现有日期
- html - Beautiful Soup,Python:尝试以正确的方式在 html 页面上显示 for 循环的抓取内容
- python-3.x - Django 文档“多对多字段”
- c# - 游戏对象销毁在析构函数内失败
- jupyter-notebook - 如何在等式 Jupyter 笔记本的文本中添加空格?
- python-3.x - ValueError:不支持的图像形状:()
- javascript - 为什么 [scrollIntoView()] 滚动不顺畅?
- amazon-web-services - 将特定记录从 RDS 存档到 AWS 中更便宜的存储的最佳策略
- c# - Google cloud video-intelligence, PollUntilCompleted, and ResourceExhausted, Received message greater than max (X vs. Y)
- c++ - 读取文件中所有可能的 HEX 16 字节序列并打印它们中的每一个