我想将多个列名作为参数传递给dataframe。
val readData = spark.sqlContext
.read.format("csv")
.option("delimiter",",")
.schema(Schema)
.load("emp.csv")
val cols_list1 = "emp_id,emp_dt"
val cols_list2 = "emp_num"
val RemoveDupli_DF = readData
.withColumn("rnk", row_number().over(Window.partitionBy(s"$cols_list1").orderBy(s"$cols_list2") ))
如果我有一个列名,上面的代码是有效的,而对于两个或更多的列,下面给出的是错误。
线程“main”org.apache.spark.sql.analysisexception中出现异常:无法解析' emp_id,emp_dt
'
使用scala 2.x版本。
1条答案
按热度按时间r7knjye21#
这个
partitionBy
方法作为多个签名:您的代码将列列表作为单个字符串提供,该字符串将失败,因为没有调用任何列
emp_id,emp_dt
. 因此,您将得到错误消息。可以在集合中定义列名(作为字符串)
然后这样称呼分区:
符号
: _*
告诉编译器传递cols_seq1
作为自己的论据partitionBy
调用,而不是将其全部作为单个参数调用。作为一种选择,你也可以使用