如何基于多个列对数据框进行分区?

时间:2018-09-24 12:38:40

标签: scala apache-spark

我有一个数据框: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

1 个答案:

答案 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"))