Я работал над ETL для Spark с использованием Scala, в этом ETL я хочу добавить 3 аргумента, чтобы соответственно определить repartionBy
, partitionBy
, orderBy
для записи моего фрейма данных в хранилище. Однако эти аргументы должны быть необязательными.
Я действительно не хочу писать ужасное if...else
утверждение, которое бы принимало любую комбинацию из 8 возможностей.
У меня есть функция:
def writer(
outputFormat: String,
outputFile: String,
outputMode: SaveMode,
outputRepartionBy: String,
outputParitionBy: String,
outputOrderBy: String,
dryRun: Boolean = false
)(df: DataFrame): Unit = {
if (dryRun){
df.show(500, false)
}else{
if (outputFormat == "parquet" || outputFormat == "orc" ) {
df.write.format(outputFormat).mode(outputMode).save( outputFile )
} else {
df.write.format(outputFormat).save(outputFile)
}
}
}
Можно ли сделать что-то вроде:
df.write
.if( outputRepartionBy != null ){ repartitionby( outputRepartionBy ) }
.format( outputFormat )
.mode(outputMode)
.save( outputFile )
Было бы правильным способом связать функцию, если условие выполняется, и если нет, то есть ли такие возможности в scala / spark?
Редактировать: я на Spark 2.3.1 с Scala 2.11.12