Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/19.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
在Apache Spark、Scala中将pdf转换为RDD[string]时显示强制转换错误_Scala_Apache Spark - Fatal编程技术网

在Apache Spark、Scala中将pdf转换为RDD[string]时显示强制转换错误

在Apache Spark、Scala中将pdf转换为RDD[string]时显示强制转换错误,scala,apache-spark,Scala,Apache Spark,获取第一个println而不是rddwithPath的答案 val conf = new Configuration(); conf.set(FileInputFormat.INPUT_DIR, filePath) val data = sc.newAPIHadoopRDD(conf, classOf[PdfInputFormat], classOf[LongWritable], classOf[Text]) data.foreach(x => println(x)) val rddwi

获取第一个println而不是rddwithPath的答案

val conf = new Configuration();
conf.set(FileInputFormat.INPUT_DIR, filePath)
val data = sc.newAPIHadoopRDD(conf, classOf[PdfInputFormat], classOf[LongWritable], classOf[Text])
data.foreach(x => println(x))

val rddwithPath = data.asInstanceOf[HadoopRDD[LongWritable, Text]].mapPartitionsWithInputSplit { (inputSplit, iterator) ⇒
  val file = inputSplit.asInstanceOf[FileSplit]
  iterator.map { tpl ⇒ (file.getPath.toString, tpl._2.toString) }
}
data.foreach(x => println(s"line no.: ${x._1}, data: ${x._2}"))
rddwithPath.foreach(println)
错误为:

线程“main”java.lang.ClassCastException中的“异常”:org.apache.spark.rdd.NewHadoopRDD不能强制转换为org.apache.spark.rdd.HadoopRDD 在Test.PDFReader$.main中(PDFReader.scala:26)”


你为什么不使用
binaryFiles
,然后使用例如Tica来解析PDF?是的,我也试过了,但如果我以这种方式阅读,它是如何变弱的,你会期望它工作吗?强制转换不进行转换,它们只是将值“重新解释”为新类型,NewHadoopRDD和Hadoop不允许您这样做。查看我为什么使用它是为了设置一种通用方式,因为对于txt文件夹,我将其读取为val text=sc.hadoopFile(path,classOf[TextInputFormat],classOf[LongWritable],classOf[text],classOf[text],sc.defaultMinPartitions)var rdWithPath=text.asInstanceOf[HadoopRDD[LongWritable,text]]。mapPartitionsWithInputSplit{(inputSplit,迭代器)⇒ val file=inputSplit.asInstanceOf[FileSplit]val ss=iterator.map{tpl⇒ (file.getPath.toString,tpl._2.toString)}ss}.reduceByKey((a,b)=>a)不管你在做什么,你都不能将
NewHadoopRDD
转换成
HadoopRDD
,我不知道你为什么认为你可以。您得到的异常正好描述了问题,在注释中的代码中(您真的应该添加到您的问题中),您使用的是
sc.hadoopFile
,它可能会返回一个
HadoopRDD
,因此一切正常。