我有一个数据框:yearDF,其中包含以下列:name, id_number, location, source_system_name, period_year
。
如果我想基于列对数据框进行重新分区,我会这样做:
yearDF.repartition('source_system_name')
我有一个变量:val partition_columns = "source_system_name,period_year"
我试图这样做:
val dataDFPart = yearDF.repartition(col(${prtn_String_columns}))
但出现编译错误:cannot resolve the symbol $
无论如何,我都可以根据yearDF
中的值重新划分数据帧:partition_columns
答案 0 :(得分:0)
Scala / Spark中的重新分区功能有三种实现方式:
def repartition(partitionExprs: Column*): Dataset[T]
def repartition(numPartitions: Int, partitionExprs: Column*): Dataset[T]
def repartition(numPartitions: Int): Dataset[T]
因此,为了重新划分多列,您可以尝试用逗号分割字段,并在其上使用Scala的vararg运算符,如下所示:
val columns = partition_columns.split(",").map(x => col(x))
yearDF.repartition(columns: _*)
另一种方法是,每个col都一个一个地调用:
yearDF.repartition(col("source_system_name"), col("period_year"))