Pyspark:将列转换为小写



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

col旁边导入lower

from pyspark.sql.functions import lower, col

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

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

等效于 SQL 查询

SELECT lower(bla) AS bla FROM bla

若要保留其他列,请执行

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

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

from pyspark.sql.functions import lower
df = df.withColumn("col_name", lower(df["col_name"]))

您可以使用concat_ws和拆分的组合

from pyspark.sql.functions import *
df.withColumn('arr_str', lower(concat_ws('::','arr'))).withColumn('arr', split('arr_str','::')).drop('arr_str')

另一种可能更简洁的方法:

import pyspark.sql.functions as F
df.select("*", F.lower("my_col"))

这将返回一个包含所有原始列的数据框,并小写需要它的列。

相关内容

  • 没有找到相关文章

最新更新