参数化spark分区by子句

时间:2018-01-31 12:01:37

标签: scala apache-spark hive

我正在尝试在现有的Hive分区表中插入DataFrame

我想通过分区列进行参数化,但我当前的方法不起作用:

var partitioncolumn="\"deletion_flag\",\"date_feed\""
df.repartition(37).write.
  mode(SaveMode.Overwrite).
  partitionBy(partitioncolumn).
  insertInto("db.table_name")

我该如何做到这一点?

2 个答案:

答案 0 :(得分:2)

partitionBy定义了可变参数:

def partitionBy(colNames: String*): DataFrameWriter[T] 

应该是:

var partitioncolumn= Seq("deletion_flag", "date_feed")
df.repartition(37).write.mode(SaveMode.Overwrite).partitionBy(
   partitioncolumn: _*
).insertInto("db.table_name")

您可以在其中提供扩展的列名列表。

答案 1 :(得分:0)

partitionBy采用可变数量的参数(即String s)。

def partitionBy(colNames: String*): DataFrameWriter[T]
//                              ^ this stands for variadic arguments

在Scala中,您可以将带有: _*的序列传递给后缀,以将其作为参数列表传递。

所以你可以做以下的事情:

var partitioncolumn= Seq("deletion_flag", "date_feed")
df.repartition(37).write.
  mode(SaveMode.Overwrite).
  partitionBy(partitioncolumn: _*).
  insertInto("db.table_name")

Q&A中描述了将序列作为可变参数传递。