根据DataFrames API,定义为:
public void foreach(scala.Function1<Row,scala.runtime.BoxedUnit> f)
将函数f应用于所有行。
但是当我尝试时
Dataframe df = sql.read()
.format("com.databricks.spark.csv")
.option("header","true")
.load("file:///home/hadoop/Desktop/examples.csv");
df.foreach(x->
{
System.out.println(x);
});
我收到编译时错误。有什么错吗?
答案 0 :(得分:4)
首先扩展scala.runtime.AbstractFunction1
并实现Serializable,如下所示
public abstract class SerializableFunction1<T,R>
extends AbstractFunction1<T, R> implements Serializable
{
}
现在使用下面这个SerializableFunction1
类。
df.foreach(new SerializableFunction1<Row,BoxedUnit>(){
@Override
public BoxedUnit apply(Row row) {
System.out.println(row.get(0));
return BoxedUnit.UNIT;
}
});
答案 1 :(得分:4)
您可以将其转换为Java RDD,以便将lambda用作:
df.toJavaRDD().foreach(x->
System.out.println(x)
);
答案 2 :(得分:0)
尝试使用此代码:
df.foreach(new VoidFunction<String>(){ public void call(String line) {
//your function code here
}});
如果您只是想显示df内容,那么这就容易多了:
df.show();