【发布时间】:2017-05-22 19:04:09
【问题描述】:
我正在通过搜索已归档的“脚本”之一并返回匹配项作为新列的条目,为 Pyspark 中的现有数据框创建一个新库。
import re as re
def sw_fix(data_str):
if re.compile(r'gaussian').search(data_str):
cleaned_str = 'gaussian'
elif re.compile(r'gromacs').search(data_str):
cleaned_str = 'gromacs'
else:
cleaned_str = 'ns'
return cleaned_str
sw_fix_udf = udf(sw_fix, StringType())
k=df.withColumn("software_new", sw_fix_udf(df.script))
代码运行良好并生成具有正确匹配的新列的数据帧 k,但是我无法对新添加的列执行任何操作
k.filter(k.software_new=='gaussian').show()
抛出一个错误,TypeError: expected string or buffer。
我检查了新添加列的数据类型
f.dataType for f in k.schema.fields
显示字符串类型。
然而这个工作,其中 sw_app 是原始数据框中的现有列。
k.filter(k.sw_app=='gaussian').select('sw_app','software_new').show(5)
+--------+------------+
| sw_app|software_new|
+--------+------------+
|gaussian| gaussian|
|gaussian| gaussian|
|gaussian| gaussian|
|gaussian| gaussian|
|gaussian| gaussian|
+--------+------------+
关于为什么我不能处理 software_new 字段的任何提示?
【问题讨论】: