我有一个火花数据框,其中的一列包含字符串值(即“ xyztext \ afadfa”)。我希望创建一个新列,其值取决于原始列是否包含某些文本(即“文本”),其值为“ 0”或“ 1”
结果示例:
## +---+---+------+---------+
## | x1| x2| x3 | xnew |
## +---+---+------+---------+
## | 1| a| xtext| 1 |
## | 3| B| abcht| 0 |
编辑:我以前尝试过此操作(现在已经添加了.cast(int)),这要归功于SGVD,但是当我插入列名时收到“ column is not callable”错误:df1 = df.withColumn('Target',df.column .contains('text')。cast('int'))
到目前为止,我取得的最好成绩是通过以下方式创建了一个包含0的列:
from pyspark.sql.functions import lit
df1 = df.withColumn('Target', lit(0))
我也尝试了if if else语句来创建向量,但是没有运气:
def targ(string):
if df.column.contains('text'): return '1'
else: return '0'
星火列有一个cast
方法间的转换,你可以投一个boolean类型为整数,其中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)"))
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句