rdd.mapPartitions从Spark Scala中的udf返回一个布尔值

时间:2019-03-28 17:58:41

标签: scala apache-spark user-defined-functions

我正在将Scala 2.11与Spark 2.1一起使用

我有一个MutableList [String]定义为变量objectKeys

我正在尝试使用Spark并行化,如下所示:

val numPartitioning = 10
val rdd = sc.parallelize(objectKeys, numPartitioning);
val x = rdd.mapPartitions(read_files_from_list(objectKeys))


def read_files_from_list(keys:MutableList[String]): Boolean = {
  // my logic to iterate over keys
  if success
     return true;
  else 
     return false;
}

但是我遇到错误类型不匹配;找到:布尔值必需:Iterator [String]⇒Iterator [?]在涉及默认参数的应用程序中发生错误。

要使udf'read_files_from_list'接受MutableList [String]并返回布尔值

,我需要做哪些更改?

1 个答案:

答案 0 :(得分:1)

mapPartitions需要迭代器到迭代器的转换。您以布尔值返回常数值true / false。

在这里如何编写函数

def read_files_from_list(keys:Iterator[String]): Iterator[Boolean] = keys.map( key => {
  // my logic to iterate over keys
  if success
     return true;
  else 
     return false;
})