子字符串函数返回列类型而不是值。有没有办法从pyspark中的列类型中获取值

子字符串函数返回列类型而不是值。有没有办法从pyspark中的列类型中获取值,pyspark,pyspark-dataframes,Pyspark,Pyspark Dataframes,在我的应用程序中,我使用子字符串函数将一个条件与pyspark连接进行比较。此函数返回的是列类型而不是值 substring(trim(coalesce(df.col1)), 13, 3) returns Column<b'substring(trim(coalesce(col1), 13, 3)'> 我想将来自子字符串的值与另一个dataframe列的值进行比较。两者都是字符串类型 pyspark: substring(trim(coalesce(df.col1)), leng

在我的应用程序中,我使用子字符串函数将一个条件与pyspark连接进行比较。此函数返回的是列类型而不是值

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

Column<b'substring(trim(coalesce(col1), 13, 3)'>
我想将来自子字符串的值与另一个dataframe列的值进行比较。两者都是字符串类型

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|
+----+---------------+----+----+

创建要连接的示例数据帧

    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|
+----+---------------+----+----+

谢谢你的回复。它正在使用负指数。我在寻找一种方法,如果我们也能用长度函数来计算。现在将解决负指数问题。感谢您的回复。它正在使用负指数。我在寻找一种方法,如果我们也能用长度函数来计算。目前将解决负指数问题。