Spark DataFrame.flatMap在java中的使用
我在java中使用过RDD.flatMap函数。现在我正在尝试数据帧 他们说:Spark DataFrame.flatMap在java中的使用,java,apache-spark,flatmap,Java,Apache Spark,Flatmap,我在java中使用过RDD.flatMap函数。现在我正在尝试数据帧 他们说: public <R> RDD<R> flatMap(scala.Function1<org.apache.spark.sql.Row, scala.collection.TraversableOnce<R>> f, scala.reflect.ClassTag<R> evidence$4) 这看起来很奇怪,但我继续制作证据$4: ClassTag&
public <R> RDD<R> flatMap(scala.Function1<org.apache.spark.sql.Row,
scala.collection.TraversableOnce<R>> f, scala.reflect.ClassTag<R> evidence$4)
这看起来很奇怪,但我继续制作证据$4
:
ClassTag<Row> evidence$4 = scala.reflect.ClassTag$.MODULE$.apply(Row.class);
但是,我应该如何从行
获得可遍历一次
还有,我尝试的方法正确吗?还是我遗漏了什么
我正在使用Apache Spark 1.3.1您应该执行以下操作:
RDD res=df.flatMap(新的AbstractFunction1(){
公共可遍历一次应用(行){
return new ListSet().$plus(row);//注意更新的列表是从$plus()返回的
}
}证据(4元),;
这将类似于map
,只是有更多的更改自由。例如,要筛选出内容,可以在希望返回空的new ListSet()
时返回它,或者保持当前的行为<代码>平面图
非常灵活
(从Java集合到Scala集合的转换似乎并不简单。)首先,您应该在函数中使用。您也可以使用从Java集合创建
TraversableOnce
。请删除“spark Java”标记,它与Apache spark无关。在我看来,DataFrame=RDD+Schema。如果是这样的话,基本上我们应该做的是newDF=DF.RDD.flatmap(f.applySchema(),而不必费心重新发明轮子。是这样吗??引擎盖下面没有零钱吗?性能会一样吗?@gábor bakos,尝试了与您答案完全相同的代码。它显示编译错误,并要求我“将强制转换添加到‘TraversableOnce’”。尝试了该操作,但得到了异常“java.lang.ClassCastException:scala.collection.convert.Decorators$AsScala无法强制转换为scala.collection.TraversableOnce”。在这种情况下,让我们添加一个toList()
。我在哪里添加toList()
?(很抱歉,这个scala-java的东西让人困惑)。你能把更新后的代码贴出来吗?还有什么是“证据4美元”?它有什么作用?我的编造方式正确吗?有关于Spark DF java API的很好的文档和示例吗?
ClassTag<Row> evidence$4 = scala.reflect.ClassTag$.MODULE$.apply(Row.class);
@Override
public TraversableOnce<Row> apply(Row arg0) {
// TODO Auto-generated method stub
return null;
}