【发布时间】:2019-12-20 06:41:50
【问题描述】:
看起来在 UDF 中不可能有可选/默认参数。这个jira 建议为这种用例使用两个不同的 UDF。
我的代码是这样的,
dataset.select(RecordProvider.getKeyUDF(sparkArguments.getDatasetArguments)(col(hashKeyName), col(rangeKeyName)).as("key"),
RecordProvider.getValueUDF(avroSchema)(to_json(struct(dataset.columns.map(col): _*))).as("value"))
UDF 看起来像这样,
def getKeyUDF(datasetArguments: DatasetArguments) = udf((hashKey: String, rangeKey: String) => {
.....
})
在这种情况下,rangeKeyName 可以为 null,这意味着数据集不存在 rangeKey 列。我的 UDF 注册的函数为 rangeKey 处理 null。
我很难在没有 if 的情况下完成这项工作,否则围绕整个 dataset.select 并有两个 UDF。这是唯一的方法吗?另外,由于我使用的是柯里化,所以我不能为我的 UDF 使用函数 (val),所以我必须坚持使用方法 (def)。
【问题讨论】:
标签: scala apache-spark apache-spark-sql user-defined-functions