Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.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
Apache spark 如何在两个模式RDD上执行联接操作?_Apache Spark_Rdd - Fatal编程技术网

Apache spark 如何在两个模式RDD上执行联接操作?

Apache spark 如何在两个模式RDD上执行联接操作?,apache-spark,rdd,Apache Spark,Rdd,我有两个SchemaRDD,我想对它们执行连接操作(与sqljoin相同)。 请帮帮我。从 在(K,V)类型的数据集上调用时加入(otherDataset,[numTasks]) 和(K,W),返回(K,(V,W))对的数据集,其中包含 每个键的元素。外部联接也支持通过 左外联和右外联 您可能希望通过映射转换来运行schemaRDDs,将它们放在(K,V)表单中:K是您想要加入的键,而V可以是整行对象。例如 val a = ... val b = ... val bWithKey = b.map

我有两个SchemaRDD,我想对它们执行连接操作(与sqljoin相同)。 请帮帮我。

在(K,V)类型的数据集上调用时加入(otherDataset,[numTasks]) 和(K,W),返回(K,(V,W))对的数据集,其中包含 每个键的元素。外部联接也支持通过 左外联和右外联

您可能希望通过映射转换来运行schemaRDDs,将它们放在
(K,V)
表单中:
K
是您想要加入的键,而
V
可以是整行对象。例如

val a = ...
val b = ...
val bWithKey = b.map(v => (v.key, v))
val joined = a.map(v => (v.key, v)).join(bWithKey)

在(K,V)类型的数据集上调用时加入(otherDataset,[numTasks]) 和(K,W),返回(K,(V,W))对的数据集,其中包含 每个键的元素。外部联接也支持通过 左外联和右外联

您可能希望通过映射转换来运行schemaRDDs,将它们放在
(K,V)
表单中:
K
是您想要加入的键,而
V
可以是整行对象。例如

val a = ...
val b = ...
val bWithKey = b.map(v => (v.key, v))
val joined = a.map(v => (v.key, v)).join(bWithKey)

如果将这两个Schemards注册为表,那么实际上可以执行SQL连接。虽然以下示例使用案例类,但该技术并不依赖于它们:

val sqlContext = new org.apache.spark.sql.SQLContext(sc)
import sqlContext._
case class Score(name: String, score: Int)
case class Age(name: String, age: Int)
val scores = sc.textFile("scores.txt").map(_.split(",")).map(s => Score(s(0),s(1).trim.toInt))
val ages = sc.textFile("ages.txt").map(_.split(",")).map(s => Age(s(0),s(1).trim.toInt))
scores.registerAsTable("scores")
ages.registerAsTable("ages")
val joined = sqlContext.sql("""
    SELECT a.name, a.age, s.score
    FROM ages a JOIN scores s
    ON a.name = s.name""")
joined.collect().foreach(println)
另一种不需要注册的方法是使用语言集成语法(有人怀疑有一种方法可以简化这一过程):


如果将这两个Schemards注册为表,那么实际上可以执行SQL连接。虽然以下示例使用案例类,但该技术并不依赖于它们:

val sqlContext = new org.apache.spark.sql.SQLContext(sc)
import sqlContext._
case class Score(name: String, score: Int)
case class Age(name: String, age: Int)
val scores = sc.textFile("scores.txt").map(_.split(",")).map(s => Score(s(0),s(1).trim.toInt))
val ages = sc.textFile("ages.txt").map(_.split(",")).map(s => Age(s(0),s(1).trim.toInt))
scores.registerAsTable("scores")
ages.registerAsTable("ages")
val joined = sqlContext.sql("""
    SELECT a.name, a.age, s.score
    FROM ages a JOIN scores s
    ON a.name = s.name""")
joined.collect().foreach(println)
另一种不需要注册的方法是使用语言集成语法(有人怀疑有一种方法可以简化这一过程):