【问题标题】:Join Multiple Data frames in Spark在 Spark 中加入多个数据框
【发布时间】:2017-01-23 17:55:24
【问题描述】:

我正在实现一个使用 sqoop 将 MySql 数据导入 hdfs 的项目。它有近 30 个表。我通过推断模式将每个表作为数据框读取并注册为临时表。我在做这件事时有几个问题...... 1.假设说 df1 到 df10 ,需要为表实现几个连接。在 MySQL 中,查询将是 select a.id,b.name,c.AccountName from accounts a priority b bills c where a.id=b.id and c.name=a.name 而不是使用 sqlContext.sql(select a.id,b.name,c.AccountName from accounts a priority b bills c where a.id=b.id and c.name=a.name) 是否有其他方法可以根据条件有效地连接所有数据框..

  1. 是将表转换为数据框并在其之上进行查询的正确方法,还是在 Spark 中处理此类连接和查询的更好方法?

【问题讨论】:

    标签: scala apache-spark apache-spark-sql


    【解决方案1】:

    我有类似的问题,我最终使用:

    val df_list = ListBuffer[DataFrame]() df_list .toList.reduce((a, b) => a.join(b, a.col(a.schema.head.name) === b.col(b.schema.head.name), "left_outer"))

    您可以在 Sqoop 上创建一个免费的 sql 语句并在那里加入所有内容。或者使用 Spark JDBC 做同样的工作

    【讨论】:

    • val df_list = ListBuffer[DataFrame]() df_list .toList.reduce((a, b) => a.join(b, a.col(a.schema.head.name) === b.col(b.schema.head.name), "left_outer"))。我还没有理解这个......如果你能用例子解释我会很棒
    • df_list 是您的案例 [accounts, priority, bills] 的数据框列表,其余的只是加入第一列的所有数据框
    • 知道了,但我需要在多个条件下加入这些数据框,例如 where a.id=b.id 和 c.name=a.name) 以及更多条件下的 where
    猜你喜欢
    • 1970-01-01
    • 2020-03-18
    • 1970-01-01
    • 1970-01-01
    • 2017-08-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多