带有其他列最后一个字符的 Spark Dataframe 列

Spark Dataframe column with last character of other column

我正在寻找一种从数据框列中的字符串中获取最后一个字符并将其放入另一列的方法。

我有一个如下所示的 Spark 数据框:

    animal
    ======
    cat
    mouse
    snake

我想要这样的东西:

    lastchar
    ========
    t
    e
    e

现在我可以使用如下所示的 UDF 执行此操作:

    def get_last_letter(animal):
        return animal[-1]

    get_last_letter_udf = udf(get_last_letter, StringType())

    df.select(get_last_letter_udf("animal").alias("lastchar")).show()

我主要想知道是否有更好的方法在没有 UDF 的情况下执行此操作。谢谢!

直接使用substring函数

from pyspark.sql.functions import substring
df.withColumn("b", substring(col("columnName"), -1, 1))

一种方法是使用 Column substr() 函数:

df = df.withColumn("lastchar", df.animal.substr(-1,1))

查看文档: https://spark.apache.org/docs/2.1.0/api/python/pyspark.sql.html#pyspark.sql.Column.substr

另一种方法是使用“expr”函数:

from pyspark.sql.functions import expr

df.withColumn("lastchar", expr('RIGHT(animal, 1)')).show()