在Scala中组合两个RDD

在Scala中组合两个RDD,scala,apache-spark,rdd,Scala,Apache Spark,Rdd,第一个RDD,user\u person,是一个蜂巢表,记录每个人的信息: +---------+---+----+ |person_id|age| bmi| +---------+---+----+ | -100| 1|null| | 3| 4|null| ... | id|startage|endage|energy| | 1| 0| 0.2| 1| | 1| 2| 10| 3| | 1|

第一个
RDD
user\u person
,是一个蜂巢表,记录每个人的信息:

+---------+---+----+
|person_id|age| bmi|
+---------+---+----+
|     -100|  1|null|
|        3|  4|null|
...
| id|startage|endage|energy|    
|  1|       0|   0.2|     1| 
|  1|       2|    10|     3| 
|  1|      10|    20|     5| 
下面是我的第二个
RDD
,一个配置单元表,只有40行,只包含基本信息:

+---------+---+----+
|person_id|age| bmi|
+---------+---+----+
|     -100|  1|null|
|        3|  4|null|
...
| id|startage|endage|energy|    
|  1|       0|   0.2|     1| 
|  1|       2|    10|     3| 
|  1|      10|    20|     5| 
我想按年龄范围计算每一行每个人的能量需求

例如,一个人的年龄是4岁,所以需要3点能量。我想将该信息添加到RDD
user\u person


如何执行此操作?

首先,使用
enableHiveSupport()
初始化spark会话,并将配置单元配置文件(Hive-site.xml、core-site.xml和hdfs-site.xml)复制到spark/conf/目录,以使spark能够从配置单元读取

val sparkSession = SparkSession.builder()
  .appName("spark-scala-read-and-write-from-hive")
  .config("hive.metastore.warehouse.dir", params.hiveHost + "user/hive/warehouse")
  .enableHiveSupport()
  .getOrCreate()
将配置单元表作为数据帧读取,如下所示:

val personDF= spark.sql("SELECT * from user_person")
val infoDF = spark.sql("SELECT * from person_info")
使用以下表达式连接这两个数据帧:

val outputDF = personDF.join(infoDF, $"age" >= $"startage" && $"age" < $"endage")
val outputDF=personDF.join(infoDF,$“age”>=$“startage”和&$“age”<$“endage”)

outputDF
数据帧包含输入数据帧的所有列。

首先,使用
enablehavesupport()
初始化spark会话,并将配置单元配置文件(Hive-site.xml、core-site.xml和hdfs-site.xml)复制到spark/conf/目录,以使spark能够从配置单元读取数据

val sparkSession = SparkSession.builder()
  .appName("spark-scala-read-and-write-from-hive")
  .config("hive.metastore.warehouse.dir", params.hiveHost + "user/hive/warehouse")
  .enableHiveSupport()
  .getOrCreate()
将配置单元表作为数据帧读取,如下所示:

val personDF= spark.sql("SELECT * from user_person")
val infoDF = spark.sql("SELECT * from person_info")
使用以下表达式连接这两个数据帧:

val outputDF = personDF.join(infoDF, $"age" >= $"startage" && $"age" < $"endage")
val outputDF=personDF.join(infoDF,$“age”>=$“startage”和&$“age”<$“endage”)

outputDF
dataframe包含输入数据帧的所有列。

我们可以看到实现了所有逻辑的预期输出吗?我们可以看到实现了所有逻辑的预期输出吗?