我有一个包含字符串值的列(即“xyztext\afadfa”)。我希望创建一个新列,其中值为“0”或“1”,这取决于原始列是否包含某些文本(即“文本”)。
结果实例:
## +---+---+------+---------+
## | x1| x2| x3 | xnew |
## +---+---+------+---------+
## | 1| a| xtext| 1 |
## | 3| B| abcht| 0 |
编辑:我之前已经尝试过了(现在已经添加了.cast(int)),但是当我插入列名: df1 = df.withColumn('Target',df.column.contains(‘text’).cast(‘int’)时,收到的“列不可调用”错误
到目前为止,我所取得的最好成绩是通过以下方法创建了一个包含0的列:
from pyspark.sql.functions import lit
df1 = df.withColumn('Target', lit(0))
我还尝试了一条if然后luck语句来创建向量,但是没有运气:
def targ(string):
if df.column.contains('text'): return '1'
else: return '0'
发布于 2016-05-24 03:36:10
星火列具有在类型之间转换的cast
方法,您可以将布尔类型转换为整数,其中True
转换为1
,False
转换为0
。在Scala中,您可以使用Column#contains
来检查子字符串。PySpark没有此方法,但您可以使用instr
函数:
import pyspark.sql.functions as F
df1 = df.withColumn('Target', (F.instr(df.column, 'text') > 0).cast('int'))
还可以将此函数编写为SQL表达式:
df1 = df.withColumn('Target', F.expr("INSTR(column, 'text') > 0").cast('int'))
或者,完全在SQL中没有强制转换:
df1 = df.withColumn('Target', F.expr("IF(INSTR(column, 'text') > 0, 1, 0)"))
https://stackoverflow.com/questions/37411284
复制相似问题