PySpark: TypeError: объект 'str' не вызывается в операциях с кадрами данных
Я читаю файлы из папки в цикле и создаю кадры данных из них. Тем не менее, я получаю эту странную ошибку 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"))))
с вышеуказанной ошибкой.
Кто-нибудь может помочь?
3 ответа
Ваш код выглядит хорошо - если ошибка действительно происходит в той строке, в которой вы говорите, что она произошла, вы, вероятно, случайно перезаписали одну из функций PySpark строкой.
Чтобы проверить это, поместите следующую строку прямо над циклом for и посмотрите, выполняется ли код сейчас без ошибок:
from pyspark.sql.functions import col, trim, lower
В качестве альтернативы, дважды проверьте, действительно ли код останавливается в указанной вами строке, или проверьте, являются ли col, trim, lower такими, какими вы их ожидаете, вызвав их так:
col
должен вернуться
функция pyspark.sql.functions._create_function.._(col)
Есть еще одна возможная причина. В своих сценариях вы можете использовать col в качестве переменной. Это также может привести к появлению сообщения об ошибке.
В разделе импорта используйте:
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"))))
Надеюсь, это сработает. Удачи.