繁体   English   中英

在Scala中合并两个RDD

[英]Combine two RDDs in Scala

第一个RDD user_person是一个Hive表,其中记录了每个人的信息:

+---------+---+----+
|person_id|age| bmi|
+---------+---+----+
|     -100|  1|null|
|        3|  4|null|
...

以下是我的第二个RDD ,一个只有40行并且仅包含基本信息的Hive表:

| id|startage|endage|energy|    
|  1|       0|   0.2|     1| 
|  1|       2|    10|     3| 
|  1|      10|    20|     5| 

我想按年龄范围为每一行计算每个人的能量需求。

例如,一个人的年龄为4,因此需要3能量。 我想将该信息添加到RDD user_person

我怎样才能做到这一点?

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

val sparkSession = SparkSession.builder()
  .appName("spark-scala-read-and-write-from-hive")
  .config("hive.metastore.warehouse.dir", params.hiveHost + "user/hive/warehouse")
  .enableHiveSupport()
  .getOrCreate()

读取Hive表作为数据框,如下所示:

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")

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM