Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
lambda中的Java 8变量范围(特定于Spark)_Java_Apache Spark_Lambda_Scope - Fatal编程技术网

lambda中的Java 8变量范围(特定于Spark)

lambda中的Java 8变量范围(特定于Spark),java,apache-spark,lambda,scope,Java,Apache Spark,Lambda,Scope,我想用字符串作为键,行作为值填充映射,我的代码: private Map<String,Row> getMapFromDataset(Dataset<Row> dataset, List<String> mapColumns) { Map<String, Row> map = new HashMap<>(); dataset.foreach((ForeachFunction<Row>) row ->

我想用字符串作为键,行作为值填充映射,我的代码:

private Map<String,Row> getMapFromDataset(Dataset<Row> dataset, List<String> mapColumns) {
    Map<String, Row> map = new HashMap<>();
    dataset.foreach((ForeachFunction<Row>) row ->
        map.put(getKey(mapColumns,row),row) //This works
    );
    return map; //Map is empty when returning!
}
私有映射getMapFromDataset(数据集数据集,列表映射列){
Map Map=newhashmap();
dataset.foreach((ForeachFunction)行->
put(getKey(mapColumns,row),row)//这很有效
);
return map;//返回时map为空!
}
我的getKey()方法(尽管我认为不是问题的原因):

私有字符串getKey(列表映射列,行){
StringBuffer sb=新的StringBuffer(256);
for(字符串列:映射列){
sb.append((字符串)row.getAs(col));
}
使某人返回字符串();
}
虽然编译和运行时没有错误,但映射始终为空。
我注意到,如果我在第一次插入后立即检查映射的大小,则映射的大小为1,因此项目插入工作正常,但返回的映射为空
我还读到lambda中使用的变量应该是final,这也许可以解释问题。
有什么提示吗?

我发现映射初始化发生在驱动程序中,而lambdas
foreach
被发送给执行者。

数据集可能不是空的,这可能不是在lambdaYes中变异对象的好主意,但这将迫使我通过“ToLocalitator()”或“collectAsList()”从数据集中取出行“让这变得非常缓慢,而且有不必要的垃圾。
private String getKey(List<String> mapColumns, Row row) {
    StringBuffer sb = new StringBuffer(256);
    for(String col : mapColumns){
      sb.append((String)row.getAs(col));
    }
    return sb.toString();
}