substring 函数 return 列类型而不是值。有没有办法从pyspark中的列类型中获取值

substring function return column type instead of a value. Is there a way to fetch a value out of column type in pyspark

我正在通过使用子字符串函数在我的应用程序中比较条件与 pyspark 连接。此函数返回列类型而不是值。

substring(trim(coalesce(df.col1)), 13, 3) returns

Column<b'substring(trim(coalesce(col1), 13, 3)'>

尝试使用 expr 但仍然得到相同的列类型结果

expr("substring(trim(coalesce(df.col1)),length(trim(coalesce(df.col1))) - 2, 3)")

我想将来自子字符串的值与另一个数据框列的值进行比较。都是字符串类型

pyspark:

substring(trim(coalesce(df.col1)), length(trim(coalesce(df.col1))) -2, 3) == df2["col2"]

让我们说 col1 = 'abcdefghijklmno'

根据上述定义,子字符串函数的预期输出应该mno

正在创建要加入的样本数据帧

    list1 = [('ABC','abcdefghijklmno'),('XYZ','abcdefghijklmno'),('DEF','abcdefghijklabc')]
    df1=spark.createDataFrame(list1, ['col1', 'col2'])


    list2 = [(1,'mno'),(2,'mno'),(3,'abc')]
    df2=spark.createDataFrame(list2, ['col1', 'col2'])


import pyspark.sql.functions as f

创建子字符串以读取三个位置的最后 n 个字符。

cond=f.substring(df1['col2'], -3, 3)==df2['col2']
newdf=df1.join(df2,cond)

>>> newdf.show()
+----+---------------+----+----+
|col1|           col2|col1|col2|
+----+---------------+----+----+
| ABC|abcdefghijklmno|   1| mno|
| ABC|abcdefghijklmno|   2| mno|
| XYZ|abcdefghijklmno|   1| mno|
| XYZ|abcdefghijklmno|   2| mno|
| DEF|abcdefghijklabc|   3| abc|
+----+---------------+----+----+