我想从特定列(purch_location)中的所有值中删除空格。我使用的是火花表,而不是数据帧或SQL表(但如果需要,我可以使用数据帧或SQL表)。
以下是我的火花表的生成方式:
dataset = spark.table("trans")
cols = dataset.columns
dataset.show(5)
+----------+-------------+-------+--------------------+--------------+---+---+
|purch_date| purch_class|tot_amt| serv-provider|purch_location| id| y|
+----------+-------------+-------+--------------------+--------------+---+---+
|06/11/2017| Printing| -0.66| CARDS AND POCKETS| | 0| 0|
|03/11/2017|Uncategorized| -17.53| HOVER | | 1| 0|
|02/11/2017| Groceries| -70.05|1774 MAC'S CONVEN...| BRAMPTON | 2| 1|
|31/10/2017|Gasoline/Fuel| -20.0| ESSO | | 3| 0|
|31/10/2017| Travel| -9.0|TORONTO PARKING A...| TORONTO | 4| 0|
+----------+-------------+-------+--------------------+--------------+---+---+
我尝试过以下功能 pyspark.sql.functions import regexp_replace
from pyspark.sql.functions import regexp_replace
dataset1=dataset.select(regexp_replace(col("purch_location"),"\\s+",""))
删除列之后但不是之前的空格。它还摆脱了我想保留的其余列。
+-------------------------------------+
|regexp_replace(purch_location, \s+, )|
+-------------------------------------+
| |
| |
| BRAMPTON|
| |
| TORONTO|
| |
| BRAMPTON|
| BRAMPTON|
| |
| null|
| MISSISSAUGA|
| |
| BRAMPTON|
知道如何解决这个问题吗?提前致谢。
答案 0 :(得分:1)
只需使用pyspark.sql.functions.trim
:
修剪指定字符串列的两端空格。
from pyspark.sql.functions import trim
dataset.select(trim("purch_location"))
要转换为null:
from pyspark.sql.functions import length trim, when
df.select(when(length(trim("purch_location")) != 0, trim("purch_location")))
我使用的是火花表,而不是数据帧
SparkSession.table
返回DataFrame
:
spark.range(1).createOrReplaceTempView("df")
type(spark.table("df"))
# pyspark.sql.dataframe.DataFrame
答案 1 :(得分:1)
如果您使用数据框,这应该有效:
from pyspark.sql.functions import trim
dataset = dataset.withColumn("purch_location", trim(df. purch_location))