子字符串函数返回列类型而不是值。有没有办法从pyspark中的列类型中获取值
在我的应用程序中,我使用子字符串函数将一个条件与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
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|
+----+---------------+----+----+
谢谢你的回复。它正在使用负指数。我在寻找一种方法,如果我们也能用长度函数来计算。现在将解决负指数问题。感谢您的回复。它正在使用负指数。我在寻找一种方法,如果我们也能用长度函数来计算。目前将解决负指数问题。