首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >星火中的数据融合

星火中的数据融合
EN

Stack Overflow用户
提问于 2016-08-01 19:28:42
回答 2查看 1.6K关注 0票数 0

我有两个Dataframes,比如A& B。我想加入到一个键列中,并创建另一个Dataframe。当A & B键匹配时,我需要的是B行,而不是A行。

例如:

DataFrame A:

代码语言:javascript
复制
Employee1, salary100
Employee2, salary50
Employee3, salary200

DataFrame B

代码语言:javascript
复制
Employee1, salary150
Employee2, salary100
Employee4, salary300

由此产生的DataFrame应该是:

DataFrame C:

代码语言:javascript
复制
Employee1, salary150
Employee2, salary100
Employee3, salary200
Employee4, salary300

我如何在Spark & Scala中做到这一点?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-08-01 19:34:51

尝试:

代码语言:javascript
复制
dfA.registerTempTable("dfA")
dfB.registerTempTable("dfB")

sqlContext.sql("""
SELECT coalesce(dfA.employee, dfB.employee), 
       coalesce(dfB.salary, dfA.salary) FROM dfA FULL OUTER JOIN dfB
ON dfA.employee = dfB.employee""")

代码语言:javascript
复制
sqlContext.sql("""
SELECT coalesce(dfA.employee, dfB.employee),
  CASE dfB.employee IS NOT NULL THEN dfB.salary
  CASE dfB.employee IS NOT NULL THEN dfA.salary
  END FROM dfA FULL OUTER JOIN dfB
ON dfA.employee = dfB.employee""")
票数 1
EN

Stack Overflow用户

发布于 2016-08-01 20:57:20

假设dfA和dfB有2列emp和sal。您可以使用以下内容:

代码语言:javascript
复制
import org.apache.spark.sql.{functions => f}

val dfB1 = dfB
  .withColumnRenamed("sal", "salB")
  .withColumnRenamed("emp", "empB")

val joined = dfA
  .join(dfB1, 'emp === 'empB, "outer")
  .select(
    f.coalesce('empB, 'emp).as("emp"),
    f.coalesce('salB, 'sal).as("sal")
  )

注意:对于emp的给定值,每个Dataframe应该只有一行。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38706677

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档