Pyspark:将列转换为小写

时间:2017-11-08 12:26:53

标签: pyspark

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

2 个答案:

答案 0 :(得分:15)

lower一起导入col

from pyspark.sql.functions import lower, col

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

spark.table('bla').select(lower(col('bla')).alias('bla'))

等同于SQL查询

SELECT col(bla) AS bla FROM bla

要保留其他列,请执行

spark.table('foo').withColumn('bar', lower(col('bar')))

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

答案 1 :(得分:0)

您可以结合使用concat_ws和split

from pyspark.sql.functions import *

df.withColumn('arr_str', lower(concat_ws('::','arr'))).withColumn('arr', split('arr_str','::')).drop('arr_str')