scala - Spark dataframe orderby在scala中使用许多列
问题描述
在 Spark 1.6 中,基本上我想应用分区,然后使用两列进行排序,以便我可以为每个分区应用排名逻辑
val str = "insertdatetime,a_load_dt"
val orderByList = str.split(",")
val ptr = "memberidnum"
val partitionsColumnsList = ptr.split(",").toList
val landingDF = hc.sql("""select memberidnum,insertdatetime,'2019-09-26' as a_load_dt from landing_omega.omegamaster""")
val stagingDF = hc.sql("""select memberidnum,insertdatetime,a_load_dt from staging_omega.omegamaster where recordstatus ='current'""")
val unionedDF = landingDF.unionAll(stagingDF)
unionedDF.registerTempTable("temp_table")
val windowFunction = Window.partitionBy(partitionsColumnsList.map(elem => col(elem)):_*).orderBy(unionedDF(orderByList(0),orderByList(1)).desc)
但它会引发以下错误
scala> val windowFunction = Window.partitionBy(partitionsColumnsList.map(elem => col(elem)):_*).orderBy(unionedDF(orderByList(0),orderByList(1)).desc)
<console>:56: error: too many arguments for method apply: (colName: String)org.apache.spark.sql.Column in class DataFrame
val windowFunction = Window.partitionBy(partitionsColumnsList.map(elem => col(elem)):_*).orderBy(unionedDF(orderByList(0),orderByList(1)).desc)
我该如何解决这个问题。我想在两列 desc order 上应用 order by
请帮忙^
解决方案
您可以使用以下代码段:
import org.apache.spark.sql.functions.col
import org.apache.spark.sql.expressions.Window
Window.partitionBy(partitionsColumnsList.map(col): _*)
.orderBy(array_union(orderByList.map(col): _*).desc)
如果这不起作用。请告诉我。
推荐阅读
- javascript - 在 jQuery 中使用复选框来切换 2 个数值
- android - 在 Unity 中使用 Play 资产交付后,应用程序大小翻倍
- ms-access - 获取访问表单中的控件数组
- python - Pandas-前行值的累积和
- reactjs - 是什么导致此异步功能仅在页面刷新后才起作用?
- postgresql - Postgres Aurora 9.6 - Toast Vacuum 导致表锁
- python - 为什么 statsmodels SARIMAX 将第一个拟合值设置为 0?
- dbt - 在工作 dbt 项目中调用 packages.yml 中的 git repo
- oracle - OracleSQLplus 的正确 OracleDBConnection 是什么?
- sql-server - 为什么我不能为 SQL Server 2019 创建外部语言?