Pyspark:将列转换为小写

jka*_*brg 15 pyspark

我想将列中的值转换为小写.目前,如果我使用该lower()方法,它会抱怨列对象不可调用.由于lower()在SQL中调用了一个函数,我假设有一个本机Spark解决方案,它不涉及UDF或编写任何SQL.

jka*_*brg 21

导入lower旁边col:

from pyspark.sql.functions import lower, col
Run Code Online (Sandbox Code Playgroud)

将它们组合在一起使用lower(col("bla")).在完整的查询中:

spark.table('bla').select(lower(col('bla')).alias('bla'))
Run Code Online (Sandbox Code Playgroud)

这相当于SQL查询

SELECT lower(bla) AS bla FROM bla
Run Code Online (Sandbox Code Playgroud)

要保留其他列,请执行

spark.table('foo').withColumn('bar', lower(col('bar')))
Run Code Online (Sandbox Code Playgroud)

毋庸置疑,这种方法比使用UDF更好,因为UDF必须调用Python(这是一个缓慢的操作,而Python本身很慢),并且比在SQL中编写它更优雅.


小智 7

from pyspark.sql.functions import lower

df = df.withColumn("col_name", lower(df["col_name"]))
Run Code Online (Sandbox Code Playgroud)


smi*_*hra 5

您可以结合使用 concat_ws 和 split

from pyspark.sql.functions import *

df.withColumn('arr_str', lower(concat_ws('::','arr'))).withColumn('arr', split('arr_str','::')).drop('arr_str')
Run Code Online (Sandbox Code Playgroud)