PySpark:TypeError:“str”对象在数据帧操作中不可调用

pva*_*rma 3 python pyspark pyspark-dataframes

我正在循环中从文件夹中读取文件并从中创建数据帧。但是,我收到了这个奇怪的错误TypeError: 'str' object is not callable。请在此处找到代码:

for yr in range (2014,2018):
  cat_bank_yr = sqlCtx.read.csv(cat_bank_path+str(yr)+'_'+h1+'bank.csv000',sep='|',schema=schema)
  cat_bank_yr=cat_bank_yr.withColumn("cat_ledger",trim(lower(col("cat_ledger"))))
  cat_bank_yr=cat_bank_yr.withColumn("category",trim(lower(col("category"))))
Run Code Online (Sandbox Code Playgroud)

代码运行一次迭代,然后停在该行

cat_bank_yr=cat_bank_yr.withColumn("cat_ledger",trim(lower(col("cat_ledger")))) 
Run Code Online (Sandbox Code Playgroud)

出现上述错误。

任何人都可以帮忙吗?

Tho*_*mas 9

您的代码看起来不错 - 如果错误确实发生在您所说的行中,您可能不小心用字符串覆盖了 PySpark 函数之一。

要检查这一点,请将以下行直接放在 for 循环上方,然后查看代码现在是否可以正常运行:

from pyspark.sql.functions import col, trim, lower
Run Code Online (Sandbox Code Playgroud)

或者,仔细检查代码是否真的停在您所说的行中,或者通过像这样调用它们来检查 col、trim、lower 是否符合您的预期:

col
Run Code Online (Sandbox Code Playgroud)

应该回来

函数 pyspark.sql.functions._create_function.._(col)

  • 你太棒了!我有这样一行:`pivot_cols=[col for col in cat_bank_yr.columns]`。没想到会出问题!更改了变量名称,现在一切正常。 (4认同)

Leo*_*eon 5

还有另一个可能的原因。在您的脚本中,您可以使用 col 作为变量。这也可能导致错误消息。