Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cassandra/3.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/6.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
ApacheSpark与Cassandra行为_Cassandra_Apache Spark_Notserializableexception - Fatal编程技术网

ApacheSpark与Cassandra行为

ApacheSpark与Cassandra行为,cassandra,apache-spark,notserializableexception,Cassandra,Apache Spark,Notserializableexception,我正在编写一个独立的Spark程序,它从Cassandra获取数据。 我遵循这些示例,通过newAPIHadoopRDD()和ColumnFamilyInputFormat类创建了RDD。 RDD已创建,但在调用RDD的.groupByKey()方法时,我得到一个NotSerializableException: publicstaticvoidmain(字符串[]args){ SparkConf SparkConf=新SparkConf(); sparkConf.setMaster(“本地”)

我正在编写一个独立的Spark程序,它从Cassandra获取数据。 我遵循这些示例,通过newAPIHadoopRDD()和ColumnFamilyInputFormat类创建了RDD。 RDD已创建,但在调用RDD的.groupByKey()方法时,我得到一个NotSerializableException:

publicstaticvoidmain(字符串[]args){
SparkConf SparkConf=新SparkConf();
sparkConf.setMaster(“本地”).setAppName(“测试”);
JavaSparkContext ctx=新的JavaSparkContext(sparkConf);
作业=新作业();
Configuration jobConf=job.getConfiguration();
job.setInputFormatClass(ColumnFamilyInputFormat.class);
setInputInitialAddress(jobConf,主机);
setinpurpcpport(jobConf,port);
setOutputinInitialAddress(jobConf,主机);
setOutpurtPCPort(jobConf,端口);
setInputColumnFamily(jobConf,keySpace,columnFamily,true);
setInputPartitioner(jobConf,“第三部分”);
setOutputPartitioner(jobConf,“第三部分”);
SlicePredicate谓词=新的SlicePredicate();
SliceRange SliceRange=新的SliceRange();
sliceRange.setFinish(新字节[0]);
sliceRange.setStart(新字节[0]);
谓词.setSlice_范围(sliceRange);
setInputSlicePredicate(jobConf,predicate);
JavaPairRDD rdd=
spark.newAPIHadoopRDD(jobConf,
ColumnFamilyInputFormat.class.asSubclass(org.apache.hadoop.mapreduce.InputFormat.class),
ByteBuffer.class、SortedMap.class);
javapairdd groupRdd=rdd.groupByKey();
System.out.println(groupRdd.count());
}
例外情况:

java.io.NotSerializableException:java.nio.HeapByteBuffer 位于java.io.ObjectOutputStream.WriteObject 0(ObjectOutputStream.java:1164) 位于java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1518) 位于java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1483) 位于java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1400) 位于java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1158) 位于java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:330) 位于org.apache.spark.serializer.JavaSerializationStream.writeObject(JavaSerializer.scala:42) 位于org.apache.spark.storage.DiskBlockObjectWriter.write(BlockObjectWriter.scala:179) 在org.apache.spark.scheduler.ShuffleMapTask$$anonfun$runTask$1.apply上(ShuffleMapTask.scala:161) 在org.apache.spark.scheduler.ShuffleMapTask$$anonfun$runTask$1.apply上(ShuffleMapTask.scala:158) 位于scala.collection.Iterator$class.foreach(Iterator.scala:727) 在org.apache.spark.interruptblediator.foreach(interruptblediator.scala:28) 在org.apache.spark.scheduler.ShuffleMapTask.runTask(ShuffleMapTask.scala:158)上 在org.apache.spark.scheduler.ShuffleMapTask.runTask(ShuffleMapTask.scala:99)上 位于org.apache.spark.scheduler.Task.run(Task.scala:51) 位于org.apache.spark.executor.executor$TaskRunner.run(executor.scala:187) 位于java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:895) 位于java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:918) 运行(Thread.java:662)

我试图做的是将所有行键列合并到一个条目中。 当我尝试使用reduceByKey()方法时,也会遇到同样的异常,如下所示:

JavaPairRDD<ByteBuffer, SortedMap<ByteBuffer, IColumn>> reducedRdd = rdd.reduceByKey(
    new Function2<SortedMap<ByteBuffer, IColumn>, SortedMap<ByteBuffer, IColumn>, sortedMap<ByteBuffer, IColumn>>() {
        public SortedMap<ByteBuffer, IColumn> call(SortedMap<ByteBuffer, IColumn> arg0,
            SortedMap<ByteBuffer, IColumn> arg1) throws Exception {
            SortedMap<ByteBuffer, IColumn> sortedMap = new TreeMap<ByteBuffer, IColumn>(arg0.comparator());
            sortedMap.putAll(arg0);
            sortedMap.putAll(arg1);
            return sortedMap;
        }
    }
);
javapairdd reducedd=rdd.reduceByKey(
新功能2(){
公共分拣地图呼叫(分拣地图arg0,
SortedMap arg1)引发异常{
SortedMap SortedMap=新树映射(arg0.comparator());
分类地图putAll(arg0);
分类地图putAll(arg1);
返回分拣的DMAP;
}
}
);
我正在使用:

  • spark-1.0.0-bin-hadoop1
  • 卡桑德拉1.2.12
  • Java 1.6
有人知道问题出在哪里吗? 序列化失败的原因是什么

谢谢,

Shai

您的问题可能是由于尝试按缓冲区序列化引起的。它们不可序列化,在生成RDD之前需要将它们转换为字节数组


您应该尝试Spark的官方DataStax Cassandra驱动程序,该驱动程序可用

Hi Jacek,谢谢您的回复。我的解决方案就是这样。
JavaPairRDD<ByteBuffer, SortedMap<ByteBuffer, IColumn>> reducedRdd = rdd.reduceByKey(
    new Function2<SortedMap<ByteBuffer, IColumn>, SortedMap<ByteBuffer, IColumn>, sortedMap<ByteBuffer, IColumn>>() {
        public SortedMap<ByteBuffer, IColumn> call(SortedMap<ByteBuffer, IColumn> arg0,
            SortedMap<ByteBuffer, IColumn> arg1) throws Exception {
            SortedMap<ByteBuffer, IColumn> sortedMap = new TreeMap<ByteBuffer, IColumn>(arg0.comparator());
            sortedMap.putAll(arg0);
            sortedMap.putAll(arg1);
            return sortedMap;
        }
    }
);