Scala:Dataframe Merge

时间:2017-12-05 08:47:29

标签: scala dataframe merge

我在scala中有两个数据帧,我通过hive上下文使用sql查询创建它们,请在此处查看df作为图像
demand_df

另一个数据框如下 skill_map

请忽略第二个df中重复的标题,我想比较两个数据框中的技能列,并获得等效的角色,技能2并在df1中出现,即demand_df,

我在pandas中试过这个并且能够通过使用以下代码段来实现

  1. df1 = pd.DataFrame([[“INDIA”,“XXX”,“developer”,“UNKNOWN”,121],[“INDIA”,“XXXX”,“software engineer”,“UNKNOWN”,121] ,[“波兰”,“XX”,“英语”,“已知”,12 2]],列= ['国家','等级','技能','r2d2','税'])
  2. df2 = pd.DataFrame([[“english”,“NaN”,“teacher”,“NaN”,“NaN”],[20000,“Unknown”,“NaN”,“NaN”,“N” aN“],[”microsoft“,”K nown“,”Software Engineer“,”Microsoft“,”Enterprise“]],columns = ['Skill','R2D2','Role','Skill2','新兴'])
  3. result = df1.merge(df2 [['Skill','Role','Skill2','emerging']],how ='left',left_on ='Skill',right_on ='Skill')

    请指导我,因为我是scala的新手

1 个答案:

答案 0 :(得分:1)

由于您已经创建了两个数据框并希望在技能的基础上加入两个数据框并创建一个新的数据框,其中包含df1和Role,Skill2以及df2中的新数据框。 你可以通过sqlcontext来做到这一点。   val sqlContext = new org.apache.spark.sql.SQLContext(sc)

使用以下命令将两个数据帧注册为temptable:

<强> df1.registerTempTable(&#34; DF1&#34)

<强> df2.registerTempTable(&#34; DF2&#34)

之后,您使用简单的配置单元查询来连接并从数据框中获取所需的列:

val df3 = sqlContext.sql(&#34;从df1中选择a。,b。左边的连接df2 b(a.skill = b.skill)&#34;)< / p>