Спарк DataFrame порядок, используя много столбцов в Scala - PullRequest
0 голосов
/ 26 сентября 2019

В 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

Пожалуйста, помогите ^

Ответы [ 2 ]

0 голосов
/ 27 сентября 2019

Вы можете использовать следующий фрагмент:

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)

Если это не сработало.Пожалуйста, дайте мне знать.

0 голосов
/ 26 сентября 2019

Вы можете просто сделать следующее изменение:

val windowFunction = Window.partitionBy(partitionsColumnsList.head, partitionsColumnsList.tail:_*).orderBy(unionedDF(orderByList(0),orderByList(1)).desc)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...