在Apache Spark、Scala中将pdf转换为RDD[string]时显示强制转换错误
获取第一个println而不是rddwithPath的答案在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
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
,因此一切正常。