Python pyspark上的此功能有什么问题?

Python pyspark上的此功能有什么问题?,python,pyspark,Python,Pyspark,我有一个如下的数据框,只有一列和一行,我想创建一个函数,用一些文本替换匹配的字符串 df2 = pd.DataFrame([['_text1']],columns = ['my_texts']) spark_df = spark.createDataFrame(df2) def text_func(df, col): return df.withColumn("origin_code", sparkSqlFunctions.when("my_texts".startswith('_te

我有一个如下的数据框,只有一列和一行,我想创建一个函数,用一些文本替换匹配的字符串

df2 = pd.DataFrame([['_text1']],columns = ['my_texts'])
spark_df = spark.createDataFrame(df2)

def text_func(df, col):
    return df.withColumn("origin_code", sparkSqlFunctions.when("my_texts".startswith('_text1') == True, 'text_passed')
                         .otherwise("my_texts"))
此函数不知何故不起作用,并给我一个错误“数据框对象没有“text\u func”属性”

我这样称呼它
final=spark\u df.带列(“我的文本”,text\u func(spark\u df,“我的文本”))
这可能是错的

有人能帮我吗?

你可以试试这个:

from pyspark.sql import SparkSession, SQLContext, Column
from pyspark.sql import functions as F
from pyspark.sql.types import StringType
from pyspark.sql.functions import udf
import pandas as pd

spark = SparkSession.builder.appName('test').getOrCreate()
df2 = pd.DataFrame([['_text1']],columns = ['my_texts'])
spark_df = spark.createDataFrame(df2)
spark_df.show()

text_func = udf(lambda my_texts: "text_passed" if my_texts.startswith('_text1') == True else my_texts, StringType())
df = spark_df.withColumn('my_texts', text_func(spark_df['my_texts']))
df.show()

更简单的方法是使用函数
instr
在一行中完成此操作:

df = spark_df.withColumn("my_texts", F.when(F.instr(spark_df["my_texts"], '_text1')>0, 'text_passed').otherwise("my_texts"))
df.show()

在你的功能中,改变

"my_texts".startswith('_text1')

这可能是造成混乱的原因。它对我有用

通过这个修改,我明确地告诉spark第一个
“我的文本”
是一个列,而不是一个字符串


您还可以从代码中删除
==True

您尚未显示调用
text\u func()
的位置。您可能调用此函数时出错。请发布调用的附加代码注意,`df.withColumn`返回一个新的
数据帧
,这是您从
text\u func
返回的。然后再次调用
with column
,结果为
text\u func
withColumn
的第二个参数应该是
Column
表达式,而不是
DataFrame
sparkSqlFunctions.col("my_texts").startswith('_text1')