foreach 函数在 Spark DataFrame 中不起作用



根据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();

相关内容

  • 没有找到相关文章

最新更新