目前我正在学习如何在java中使用spark,但我点击了org.apache.spark。SparkException:当我尝试类似于此示例的操作时,任务不可序列化https://spark.apache.org/docs/latest/sql-programming-guide.html#inferring-使用反射的模式
这是我的代码:
Dataset<Row> sqlDF = spark.sql("SELECT * FROM Person LIMIT 15");
Encoder<String> stringEncoder = Encoders.STRING();
Dataset<String> namesByIndexDF = sqlDF.map(new MapFunction<Row, String>() {
@Override
public String call(Row row) throws Exception {
return "Name:" + row.getString(4);
}
}, stringEncoder);
namesByIndexDF.show();
希望有人可以帮助我。谢谢!
我用这段代码修复:
private static MapFunction<Row, String> mapFunc(Integer idx, String name){
return new MapFunction<Row, String>() {
@Override
public String call(Row row) throws Exception {
return name+":"+row.get(idx);
}
};
}
public void testFunc(){
Dataset<Row> sqlDF = spark.sql("SELECT * FROM Person LIMIT 15");
//sqlDF.show();
Encoder<String> stringEncoder = Encoders.STRING();
Dataset<String> namesByIndexDF = sqlDF.map(mapFunc(1, "Test"), stringEncoder);
namesByIndexDF.show();
}
但是有人能解释为什么我的第一个代码不工作吗?
无法评论。你能提供更多的代码吗?因为这个例子
https://github . com/Apache/spark/blob/master/examples/src/main/Java/org/Apache/spark/examples/SQL/javasparksql example . Java
工作得很好