我有两个数据集,一个存储在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查找表来解决这个问题。
任何人都可以建议我怎么做吗?
先谢谢。
答案 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
}