2017-08-11 70 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])