Java 11在这里使用Spark SQL的Java API(不是Scala!)。我正在尝试将Map<String,String>
转换为具有2个String列的Dataset<Row>
。我最好的尝试是:
public Dataset<Row> createKeyValueDataFrame(Map<String,String> dfMap, String keyColName, String valueColName) {
JavaSparkContext sparkContext = new JavaSparkContext(sparkSession.sparkContext());
JavaRDD<Row> rdd = sparkContext.parallelize(Arrays.asList(dfMap.entrySet().toArray()))
.map(entry -> RowFactory.create(entry.getKey(), entry.getValue()));
StructType schema = new StructType()
.add(keyColName, DataTypes.StringType)
.add(valueColName, DataTypes.StringType);
return sparkSession.createDataFrame(rdd, schema);
}
但是我在entry.getKey()
和entry.getValue()
上得到编译器错误。有人能指出为什么我得到这些错误,并帮助我找出修复是什么?先谢谢你了!
1条答案
按热度按时间pvcm50d11#
问题是当你在做
所以,当你尝试
该调用的返回值是
JavaRDD<Object>
。这就是编译器显示Cannot resolve method 'getKey' in 'Object'
的原因,因为当您调用map
时,它推断lambda参数是Object
。不知道你到底想用这段代码做什么。方法
entrySet()
将返回一个Map.Entry
的Set
,它表示一个键值对。如果您只需要将其转换为List
的键值对,则应该替换为