我需要加入2个数据框,并且在不同情况下会保留内部联接。我可以选择使用spark.sql(select * ...),也可以使用pyspark提供的用于连接的API。在性能方面,我需要同行的建议。
其中一个是封装的,请说明。与Hive一样,如果我们提交SQL查询,则在内部将其转换为Map Reducers表单并执行代码,因此使用Hive时会出现延迟。
这是否也类似,如果我们使用spark.sql,会比使用pyspark dataframe joins API慢吗?
请给我一些示例代码片段供参考:
valuesA = [('Frank',1),('Steve',2),('Michael',3),('Rajay',4)]
TableA = spark.createDataFrame(valuesA,['name','id'])
valuesB = [('Arun',1),('Christopher',2),('Yuva',3),('Michael',4),('Smith',5),('Frank',6),]
TableB = spark.createDataFrame(valuesB,['name','id'])
ta = TableA.alias('ta')
tb = TableB.alias('tb')
inner_join = ta.join(tb, ta.name == tb.name)
inner_join.show()
spark.sql(SELECT ta.*, tb.* FROM ta INNER JOIN tb ON ta.name = tb.name).createOrReplaceTempView('test')
这是一个示例数据,无法从延迟/性能优势方面获得清晰的思路。有人可以分享一下想法吗?
谢谢