1

我正在使用 substring 函数将条件与我的应用程序中的 pyspark join 进行比较。此函数返回列类型而不是值。

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'

substring 函数的预期输出应mno基于上述定义。

4

1 回答 1

0

创建要加入的示例数据框

    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|
+----+---------------+----+----+
于 2019-09-04T06:06:18.817 回答