2017-08-11 46 views
0

我想解析一個PySpark列裏面有一個「=」號。我已經爲這個目的單獨創建工作的兩個功能:使用PySpark整數列作爲參數

DF=DF.withColumn("findEqual",instr(columnName,"=")) 

而且當我創建子串的列

DF=DF.withColumn("parsedString",substring(columnName,2,18)) 

然而,當我結合了兩個功能:

DF=DF.withColumn("parsedString",2,instr(columnName,"=")) 

我收到一個錯誤: TypeError:int()參數必須是字符串或數字,而不是'Column' 這個問題似乎是PySpark沒有將「findEqual」看作一個整數,而是一個「整數對象」。

感謝您的幫助!

回答

0

您使用的不是pyspark列對字符串定義的函數,你可以使用udf將它們轉換:

from pyspark.sql.functions import udf 
from pyspark.sql.types import * 
def instr (x, s): 
    return s in x 
instr_udf = lambda s: udf(lambda x: instr(x, s), BooleanType()) 
DF=DF.withColumn("findEqual",instr_udf("=")("columnName")) 

substring_udf = udf(substring, StringType()) 

使用UDF的已經當功能我不會推薦存在於pyspark:

DF=DF.withColumn("findEqual",DF.columnName.like('%=%')) 
DF=DF.withColumn("parsedString",DF.columnName[2:18])