根据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);
});
我遇到编译时错误。 有什么错误吗?
你可以把它转换为Java RDD,以便使用lambda作为你:
df.toJavaRDD().foreach(x->
System.out.println(x)
);
首先扩展scala.runtime.AbstractFunction1
并实现可序列化,如下所示
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;
}
});
尝试使用以下代码:
df.foreach(new VoidFunction<String>(){ public void call(String line) {
//your function code here
}});
如果你只想显示df内容,这要容易得多:
df.show();