Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/17.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
将hashmap的键与scala中spark RDD的条目相匹配,并在找到匹配项时为其添加值,然后将RDD写回hbase_Scala_Apache Spark_Pattern Matching_Hbase - Fatal编程技术网

将hashmap的键与scala中spark RDD的条目相匹配,并在找到匹配项时为其添加值,然后将RDD写回hbase

将hashmap的键与scala中spark RDD的条目相匹配,并在找到匹配项时为其添加值,然后将RDD写回hbase,scala,apache-spark,pattern-matching,hbase,Scala,Apache Spark,Pattern Matching,Hbase,我正在尝试使用scala读取HBase表,然后根据HBase表中行的内容添加一个新列作为标记。我把表格读作spark RDD。我还有一个hashmap,其中键值对如下所示: 键将与spark rdd(从HBase表生成)的条目匹配,如果找到匹配项,则将hashmap中的值添加到新列中。 在新列名中写入hbase表的函数如下: def convert (a:Int,s:String) : Tuple2[ImmutableBytesWritable,Put]={

我正在尝试使用scala读取HBase表,然后根据HBase表中行的内容添加一个新列作为标记。我把表格读作spark RDD。我还有一个hashmap,其中键值对如下所示: 键将与spark rdd(从HBase表生成)的条目匹配,如果找到匹配项,则将hashmap中的值添加到新列中。 在新列名中写入hbase表的函数如下:

def convert (a:Int,s:String) : Tuple2[ImmutableBytesWritable,Put]={
                        val p = new Put(a.toString.getBytes())
                        p.add(Bytes.toBytes("columnfamily"),Bytes.toBytes("col_2"), s.toString.getBytes())//a.toString.getBytes())
                        println("the value of a is: " + a)
                        new Tuple2[ImmutableBytesWritable,Put](new ImmutableBytesWritable(Bytes.toBytes(a)), p);
                   }
 new PairRDDFunctions(newrddtohbaseLambda.map(x=>convert(x, ranjan))).saveAsHadoopDataset(jobConfig)
csvhashmap.keys.foreach{i=> if (arrayRDD.zipWithIndex.foreach{case(a,j) => a.split(" ").exists(i contains _); p = j.toInt}==true){new PairRDDFunctions(convert(p,csvhashmap(i))).saveAsHadoopDataset(jobConfig)}}
然后从hashmap中读取字符串,比较并添加回代码如下:

def convert (a:Int,s:String) : Tuple2[ImmutableBytesWritable,Put]={
                        val p = new Put(a.toString.getBytes())
                        p.add(Bytes.toBytes("columnfamily"),Bytes.toBytes("col_2"), s.toString.getBytes())//a.toString.getBytes())
                        println("the value of a is: " + a)
                        new Tuple2[ImmutableBytesWritable,Put](new ImmutableBytesWritable(Bytes.toBytes(a)), p);
                   }
 new PairRDDFunctions(newrddtohbaseLambda.map(x=>convert(x, ranjan))).saveAsHadoopDataset(jobConfig)
csvhashmap.keys.foreach{i=> if (arrayRDD.zipWithIndex.foreach{case(a,j) => a.split(" ").exists(i contains _); p = j.toInt}==true){new PairRDDFunctions(convert(p,csvhashmap(i))).saveAsHadoopDataset(jobConfig)}}
这里csvhashmap是上面描述的hashmap,“words”是我们试图匹配字符串的rdd。运行上述命令时,出现以下错误:

error: type mismatch;
 found   : (org.apache.hadoop.hbase.io.ImmutableBytesWritable, org.apache.hadoop.hbase.client.Put)
 required: org.apache.spark.rdd.RDD[(?, ?)]
如何摆脱它?我尝试了很多方法来更改数据类型,但每次都会出现一些错误。此外,我还检查了上述代码段中的各个函数,它们都很好。当我把它们整合在一起时,我得到了上面的错误。任何帮助都将不胜感激