Apache Spark中的lookup()函数

时间:2017-02-01 08:52:28

标签: hadoop apache-spark hive lookup lookup-tables

我有两个数据集,一个存储在Hive中(较小的一个存储用作查找表),另一个数据集来自火花流。

现在我的要求是对这两个数据集执行一些操作。

例如:

dataset1 :(存储在配置单元中)

    <body>
<nav class="navbar navbar-inverse" data-spy="affix" data-offset-top="197">
   <div class="container-fluid">
     <div class="navbar-header">
       <a class="navbar-brand" href="#">A09hopper.xyz</a>
     </div>
     <ul class="nav navbar-nav">
       <li class="active"><a href="#">Home</a></li>
       <li><a href="#">Page 1</a></li>
       <li><a href="#">Page 2</a></li>
     </ul>
     <ul class="nav navbar-nav navbar-right">
       <li><a href="#"><span class="glyphicon glyphicon-user"></span> Sign Up</a></li>
       <li><a href="#"><span class="glyphicon glyphicon-log-in"></span> Login</a></li>
     </ul>
  </div>
</nav>
<div class="jumbotron" style="text-align:center;">
  <h1>Main Page</h1>      
  <p>This is the main page. Just like a contents page.</p>
</div>



<p id="demo"></p>
<div>
<p>Text</p>
<p>Text</p>
<p>Text</p>
<p>Text</p>
<p>Text</p>
<p>Text</p>
<p>Text</p>
<p>Text</p>
<p>Text</p>
<p>Text</p>
<p>Text</p>
<p>Text</p>
<p>Text</p>
<p>Text</p>
<p>Text</p>
<p>Text</p>
<p>Text</p>
<p>Text</p>
</div>
</body>

dataset2 :(来自火花流)

id     name  
101    steve
102    david

每当我从流媒体获得id deprt address 101 E01 NewYork 102 E02 London 时,我想要合并两个数据集并返回结果,如:

101   E01    NewYork

早些时候,我使用广播变量完成了这类任务,我试图通过使用Hive查找表来解决这个问题。

任何人都可以建议我怎么做吗?

先谢谢。

1 个答案:

答案 0 :(得分:3)

假设你的hive查找表很小,因为你已经将它用作广播变量,你可以通过读取hive表来创建数据帧,使用它可以执行查找。

val hiveContext = new org.apache.spark.sql.hive.HiveContext(sc)
val lookupDF = hiveContext.sql("select * from your_hive_table").cache() //cache lookup data


ds.transform {
    rdd => 
        val df = rdd.toDF("c1","c2","c3")
        df.join(lookupDF, lookupDF("col") === df("col")).select("co1","col2","col3").rdd
}