AttributeError:“function”对象没有属性

问题

选择数据帧中的列时出现错误消息。

ERROR: AttributeError: 'function' object has no attribute '_get_object_id' in job

原因

数据帧 API 包含少量的受保护关键字。

如果数据帧中的列使用受保护的关键字作为列名,则会出现错误消息。

例如,summary 是受保护的关键字。 如果使用 summary 作为列名,则会出现错误消息。

此示例代码使用 summary 作为列名,在运行时会生成错误消息。

df=spark.createDataFrame([1,2], "int").toDF("id")
df.show()
from pyspark.sql.types import StructType,StructField, StringType, IntegerType

df1 = spark.createDataFrame(
  [(10,), (11,), (13,)],
  StructType([StructField("summary", IntegerType(), True)]))

df1.show()

ResultDf = df1.join(df, df1.summary == df.id, "inner").select(df.id,df1.summary)
ResultDf.show()

解决方案

不应使用数据帧 API 受保护关键字作为列名。

如果必须使用受保护关键字,选择数据帧中的列时应使用基于括号的列访问。 选择使用受保护关键字的列时请不要使用点表示法。

ResultDf = df1.join(df, df1["summary"] == df.id, "inner").select(df.id,df1["summary"])