【问题标题】:TypeError: 'Column' object is not callable Pysarpk, when joining two tablesTypeError:连接两个表时,“列”对象不可调用 Pysarpk
【发布时间】:2023-03-31 05:33:01
【问题描述】:

所以我试图 2 加入 2 个数据帧,这样做我得到以下错误。

TypeError: 'Column' 对象不可调用

我将数据加载为简单的 csv 文件,以下是从 CSV 加载的架构。

根 |-- movie_id,title: string (nullable = true)

根 |-- user_id,movie_id,tag,timestamp: string (nullable = true)

以下是我的加载实现

df1 = spark.read.format("csv").option("header", "true").load("collaborative/titles.csv", header=True, sep="|")
df2 = spark.read.format("csv").option("header", "true").load("collaborative/tags.csv", header=True, sep="|")
df1.printSchema()
df2.printSchema()
df1.alias("df1").join(df2.alias("df2"), col("df1.movie_id").equalTo(col("df2.movie_id"))).select(col("df2.*"))

【问题讨论】:

    标签: python pyspark pyspark-sql pyspark-dataframes


    【解决方案1】:

    列对象上没有称为equalTo 的方法。当您执行col("df1.movie_id").equalTo 时,它假定您正在访问movie_id 中的嵌套字段并返回另一列,因此错误:column object is not callable

    print(col('df1.movie_id').equalTo)
    # Column<b'df1.movie_id[equalTo]'>
    

    要解决此问题,请关注correct join syntax here

    在您的情况下,最简单的解决方案是在加入之前从 df1 中删除不相关的列,这样您就不必为数据框创建别名并稍后选择:

    df1.select('movie_id').join(df2, 'movie_id').show()
    

    【讨论】:

    • 我收到了这个错误pyspark.sql.utils.AnalysisException: "cannot resolve 'movie_id' given input columns: [movie_id,title];;\n'Project ['movie_id]\n+- Relation[movie_id,title#10] csv\n"
    • 您的数据似乎没有正确读取。你需要先检查一下。可能是sep="\\|" -
    【解决方案2】:

    您可以尝试以下方法:

    d1 = df1.alias("df1")
    d2 = df2.alias("df2")
    d1.join(d2,d1.movie_id == d2.movie_id).select('df2.*')
    

    可以参考pyspark join示例here

    【讨论】:

    • AttributeError: 'DataFrame' 对象没有属性 'movie_id',出现此错误
    • 您是否尝试按照链接中提到的方式加入它,或者类似df1.join(df2, on=['movie_id'], how='right')
    猜你喜欢
    • 1970-01-01
    • 2019-01-05
    • 2012-06-14
    • 1970-01-01
    • 2017-10-04
    • 1970-01-01
    • 2017-08-06
    • 2011-08-09
    • 1970-01-01
    相关资源
    最近更新 更多