java - lambda 中的 Java 8 变量范围(特定于 Spark)
问题描述
我想用字符串作为键和行作为值来填充地图,我的代码:
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!
}
我的 getKey() 方法(虽然我认为不是问题的原因):
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();
}
虽然它编译和运行没有错误,但地图总是空的。
我注意到的是,如果我在第一次插入后立即检查地图的大小,则地图的大小为 1,因此项目插入有效,但返回的地图为空
我还读到 lambda 中使用的变量应该是最终的,这可能解释了问题。有什么提示吗?
解决方案
我发现映射初始化发生在驱动程序中,而 lambdasforeach
被发送到执行程序。
推荐阅读
- css - 如何设置跨度类的样式
- r - 删除R中具有双引号的字符串中的双引号
- r - 当两个 x 和 y 点彼此相距一定距离时,R 能否成功传递计数?
- c - 基于 libevent 的回显服务器卡住了
- java - Spring中如何处理不同的JSON响应
- python - 我得到一个带有 Tkinter 输入框的“str”对象没有属性“get”错误(Python)
- html - 我的 css 网格项目没有正确排序,但我的结果几乎是正确的
- javascript - 将JS中的录制文件转换为WAV以作为参数传递给PHP中的python文件
- laravel - 未选中复选框时将数组存储在数据库中
- python - 带有空格的 PyQt 等长字符串具有不同的显示长度