5

我正在循环读取文件夹中的文件并从中创建数据框。但是,我收到了这个奇怪的错误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"))))

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

cat_bank_yr=cat_bank_yr.withColumn("cat_ledger",trim(lower(col("cat_ledger")))) 

出现上述错误。

任何人都可以帮忙吗?

4

2 回答 2

15

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

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

from pyspark.sql.functions import col, trim, lower

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

col

应该返回

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

于 2019-08-29T07:47:46.677 回答
3

在导入部分使用:

from pyspark.sql import functions as F

然后在任何使用的代码中col,使用F.col这样你的代码将是:

# on top/header part of code 
from pyspark.sql import functions as F
    
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(F.col("cat_ledger"))))
    cat_bank_yr=cat_bank_yr.withColumn("category",trim(lower(F.col("category"))))

希望这会奏效。祝你好运。

于 2020-12-02T17:37:30.490 回答