scala - 多个scala数据框concat
问题描述
我有多个 df,我想将它们组合成 1 个大 df
+----+----------+----------+
|year| state | count|
+----+----------+----------+
|2014| CT| 343477|
|2014| DE| 123431|
|2014| MD| 558686|
|2014| NJ| 773321|
|2015| CT| 343477|
|2015| DE| 123431|
|2015| MD| 558686|
|2015| NJ| 773321|
|2016| CT| 343477|
|2016| DE| 123431|
|2016| MD| 558686|
|2016| NJ| 773321|
|2017| CT| 343477|
|2017| DE| 123431|
|2017| MD| 558686|
|2017| NJ| 773321|
+----+----------+----------+
+-----------------+
|count_2 |
-----------------+
| 343477|
| 123431|
| 558686|
| 773321|
| 343477|
| 123431|
| 558686|
| 773321|
| 343477|
| 123431|
| 558686|
| 773321|
| 343477|
| 123431|
| 558686|
| 773321|
+-----------------+
我想将它们组合成 1 df
+----+----------+----------+--------------------
|year| state | count| count_2
+----+----------+----------+--------------------
|2014| CT| 343477|343477
|2014| DE| 123431|123431
|2014| MD| 558686|558686
|2014| NJ| 773321|773321
|2015| CT| 343477|343477
|2015| DE| 123431|123431
|2015| MD| 558686|558686
|2015| NJ| 773321|773321
|2016| CT| 343477|343477
so on...
我使用了 sql() 但它不起作用.. 我也尝试加入 df (left join) 它也不起作用,如果没有重复,这将是什么样的加入?谢谢!
解决方案
我认为,您的问题没有捷径可走。请找到我的以下解决方案
//Inputs:
val df1=Seq((2014,"CT",343477),(2014,"DE",123431),(2014,"MD",558686),(2014,"NJ",773321),(2015,"CT",343477),(2015,"DE",123431),(2015,"MD",558686),(2015,"NJ",773321)).toDF("year","state","count")
val df2=Seq(343477,123431,558686,773321,343477,123431,558686,773321).toDF("count_2")
//Solution:
import org.apache.spark.sql.functions._
import org.apache.spark.sql.expressions.Window
val winFun=Window.partitionBy("year","state","count").orderBy("year")
df1.join(df2,df1("count")===df2("count_2")).withColumn("row_no",row_number over winFun).filter("row_no =1").drop("row_no").orderBy("year").show
样本输出:
+----+-----+------+-------+
|year|state| count|count_2|
+----+-----+------+-------+
|2014| DE|123431| 123431|
|2014| MD|558686| 558686|
|2014| CT|343477| 343477|
|2014| NJ|773321| 773321|
|2015| MD|558686| 558686|
|2015| DE|123431| 123431|
|2015| CT|343477| 343477|
|2015| NJ|773321| 773321|
+----+-----+------+-------+
推荐阅读
- airflow - dag 暂停时 Datadog 气流警报
- javascript - 在Javascript中,主程序中的await会导致程序阻塞吗?
- android - WebView:垂直向下滚动时,但仅在 OPPO A31 设备 Android 版本 9 中自动移至屏幕顶部
- notepad++ - 如何标记另一行中存在相同单词的行,notepad ++?
- visual-studio-code - 无法使 VSCode Snippet $TM_CURRENT_LINE 工作
- swift - 不能将 UISplitViewController 放在 UITabBarController 内
- c# - 无法使用脚本任务从 SSIS 发送邮件 - 超时
- java-8 - 将自定义执行器与石英调度库一起使用
- java - 来自抽象 T 类型类的依赖注入
- telegram - Telegram API 发送消息特殊字符