我正在实现一个项目,其中使用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)
还有其他根据条件有效地加入所有数据帧。
答案 0 :(得分:0)
我有类似的问题,最后使用:
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执行相同的工作