Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Java中迭代Spark数据帧而不使用Collect_Java_Loops_Apache Spark_Dataframe_Apache Kafka - Fatal编程技术网

在Java中迭代Spark数据帧而不使用Collect

在Java中迭代Spark数据帧而不使用Collect,java,loops,apache-spark,dataframe,apache-kafka,Java,Loops,Apache Spark,Dataframe,Apache Kafka,我正在使用Spark 1.6.1 我有一个数据框架,我需要迭代并将每一行写入Kafka。现在我正在做这样的事情: Producer<String><String> message; for(Row x: my_df.collect()){ kafka_message = new Producer<String><String>(topic, String.valueOf(x)) my_kafka_producer.send(kafk

我正在使用Spark 1.6.1

我有一个数据框架,我需要迭代并将每一行写入Kafka。现在我正在做这样的事情:

Producer<String><String> message;
for(Row x: my_df.collect()){
    kafka_message = new Producer<String><String>(topic, String.valueOf(x))
    my_kafka_producer.send(kafka_message);
}
生产者消息;
for(第x行:my_df.collect()){
kafka_message=新制作人(主题,String.valueOf(x))
我的卡夫卡制作人。发送(卡夫卡消息);
}
这里的问题是collect将数据发送给驱动程序,然后推送到kafka。考虑到我有大约250个执行者,我的1驱动程序无法有效地处理工作负载。因此,我想知道如何在执行器上迭代数据帧。这将需要避免执行collect()。我发现一篇文章大致解释了如何实现它,但不幸的是,他们与GitHub的链接实际上已经过期,所以我找不到如何实现它

供参考的条款:

在Java中,您可以尝试以下方法。扩展
AbstractFunction1

import scala.runtime.AbstractFunction1;

abstract class MyFunction1<T,R> extends AbstractFunction1<T, R> implements Serializable {
}
import scala.collection.Iterator;
import scala.runtime.BoxedUnit;

df.foreachPartition(new MyFunction1<Iterator<Row>,BoxedUnit>(){
        @Override
        public BoxedUnit apply(Iterator<Row> rows) {
            while(rows.hasNext()){
                //get the Row
                Row row = rows.next();
            }
            return BoxedUnit.UNIT;
        }
    });