2017-08-26 50 views
1

我有被注册为tempView一个数据帧和蜂巢表加入pySpark怎么做TempView表连接蜂巢表

df1.createOrReplaceTempView("mydata") 

    df2 = spark.sql("Select md.column1,md.column2,mht.column1 \ 
        from mydata md inner join myHivetable mht on mht.key1 = md.key1 \ 
        where mht.transdate between '2017-08-01' and '2017-08-10' ") 

这是如何发生的联接。如果Hive表中的数据量非常大,将会尝试将hive表读入内存或决定将tempView表写入配置单元。

添加以下其他详细信息,第一个答案后:

比方说,我们有

100行作为tempView在星火称为TABLE_A。

Hive TABLE_B中的10亿行表。

下一步我们需要将TABLE_A和TABLE_B结合起来。

TABLE_B上有一个日期范围条件。

由于表TABLE_B的大小很大。将会将整个表TABLE_B读入内存或决定将TABLE_A写入Hadoop中的临时空间以执行Hive Join或者它将如何智能地计算出执行连接以获得高性能的最佳方式

回答

1

Hive上下文存储信息在Metastore中注册临时表/视图。这样就可以在数据上执行类似于SQL的查询操作 - 而且我们仍然可以获得与其他情况相同的性能。

一些这方面的更多信息,可以阅读herehere

+0

是的,这是正确的。假设我们在Spark中有100行为tempView,名为TABLE_A。我在Hive TABLE_B中有一个10亿行的表。作为下一步,我们需要加入这些2. TABLE_B上有一个日期范围条件。由于表TABLE_B的大小很大。 Spark会将整个表TABLE_B读入内存中,或者决定将TABLE_A写入Hadoop中的临时空间以执行Hive Join,或者如何智能地找出最佳方式来执行连接以提高性能 – Nav

+0

Spark在管理这种大量数据方面非常聪明数据的。如果它有十亿行,你可能需要足够的配置(至少8GB执行器内存),它不会将所有内容都加载到单个节点的内存中 – karthikr