Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala 将配置单元表中的数据提取到spark中,并在RDD上执行连接_Scala_Apache Spark_Rdd_Apache Spark Sql - Fatal编程技术网

Scala 将配置单元表中的数据提取到spark中,并在RDD上执行连接

Scala 将配置单元表中的数据提取到spark中,并在RDD上执行连接,scala,apache-spark,rdd,apache-spark-sql,Scala,Apache Spark,Rdd,Apache Spark Sql,我在蜂巢/黑斑羚里有两张桌子。我想将表中的数据作为RDD提取到spark中,并执行连接操作 我不想在配置单元上下文中直接传递联接查询。这只是一个例子。 我有更多标准HiveQL无法实现的用例。 如何获取所有行、访问列和执行转换 假设我有两个RDD: val table1 = hiveContext.hql("select * from tem1") val table2 = hiveContext.hql("select * from tem2") 我想在名为“account\u id”

我在蜂巢/黑斑羚里有两张桌子。我想将表中的数据作为RDD提取到spark中,并执行连接操作

我不想在配置单元上下文中直接传递联接查询。这只是一个例子。 我有更多标准HiveQL无法实现的用例。 如何获取所有行、访问列和执行转换

假设我有两个RDD:

val table1 =  hiveContext.hql("select * from tem1")

val table2 =  hiveContext.hql("select * from tem2")
我想在名为“account\u id”的列上对RDD执行联接

理想情况下,我希望使用使用spark shell的RDD做类似的事情

select * from tem1 join tem2 on tem1.account_id=tem2.account_id; 

因此,我们可以将表1和表2注册为临时表,然后在这些临时表上进行连接

table1.registerTempTable("t1")
table2.registerTempTable("t2")
table3 = hiveContext.hql("select * from t1 join t2 on t1.account_id=t2.account_id")

表1和表2属于DataFrame类型。可以使用以下方法将其转换为rdd:

lazy val table1_rdd = table1.rdd
lazy val table2_rdd = table2.rdd
这应该是关键。在这些rdd上,您可以使用任何rdd操作


另请参见:和

我不确定我是否理解了这个问题,但是作为一种替代方法,您可以使用API连接数据帧,这样您就可以通过编程来决定许多事情(例如,
join
函数可以作为参数传递给应用自定义转换的方法)

举个例子,它是这样的:

val table1 =  hiveContext.sql("select * from tem1")
val table2 =  hiveContext.sql("select * from tem2")
val common_attributes = Seq("account_id")
val joined = table1.join(table2, common_attributes)
DataFrame API中有许多常见的转换:


Cheers

您可以直接从以下代码中选择所需的列:

val table1 =  hiveContext.hql("select account_id from tem1")
val table2 =  hiveContext.hql("select account_id from tem2")
val joinedTable = table1.join(table2) 

你好,霍顿,谢谢,但我已经说过我不想这样做。这只是一个简单的例子。我有一个用例,其中有更复杂的查询。我希望能够从结果集构造rdd,并执行联接和其他操作。啊,对不起,user1189851,我以为您希望避免在原始配置单元表上执行联接。在上面的代码片段中,我发布了table1和table2可以是任何SchemaRDD(请注意,我们编写的任何查询都会返回SchemaRDDs),您希望table1和table2是什么?您希望它们来自非Spark SQL源吗?因此我有一个例子,其中我的第一个rdd是查询的结果集。第二个是另一个查询的结果集。val rdd1=hiveContext.hql(“从表1中选择*”)和val rdd2.=hql(“从表2中选择*”)。我想在这两个RDD上对一个名为account_id的公共属性执行say join。我不想在配置单元上下文中进行连接,我应该能够使用转换来完成。