w****w 发帖数: 521 | 1 问题很简单,需要从几十万个pdf文件中抓点东西。java的程序已经有了,一个pdf输入
,产生一个csv文件。
我的基本思路是,做一个RDD,第一列是读进来的pdf binary,第二列是根据输入文件名
产生的输出文件名,然后就可以送到各个node上去抓了,最后根据输出名把结果合并成
1000个左右的输出文件。
熟悉spark的朋友能否给个框架? |
n*****3 发帖数: 1584 | 2 RDD is dead, use dataframe instead.
【在 w****w 的大作中提到】 : 问题很简单,需要从几十万个pdf文件中抓点东西。java的程序已经有了,一个pdf输入 : ,产生一个csv文件。 : 我的基本思路是,做一个RDD,第一列是读进来的pdf binary,第二列是根据输入文件名 : 产生的输出文件名,然后就可以送到各个node上去抓了,最后根据输出名把结果合并成 : 1000个左右的输出文件。 : 熟悉spark的朋友能否给个框架?
|
w****w 发帖数: 521 | 3 不熟Spark。主要两个问题:怎么建这个dataframe和怎么pipe到java external
program。
【在 n*****3 的大作中提到】 : RDD is dead, use dataframe instead.
|
w****w 发帖数: 521 | 4 狗了半天解决了一半问题:
val files = sc.binaryFiles("hdfs://server/path/*.pdf")
println(files.keys.collect().mkString("\n"))
PDF内容都在files.values里。 |
w****w 发帖数: 521 | 5 有点入门了,exception还要处理一下。这里实际使用spark的人看来不多。
import my.pdf._
import collection.JavaConverters._
import collection.mutable._
def extract_func ( row: (String, org.apache.spark.input.PortableDataStream)
) =
{
val stripper = new MyStripper()
val extractor = new MyReportExtractor()
extractor.setText(stripper.getText(row._2.open));
row._2.close
extractor.getContent().asScala
}
val file_rdd = sc.binaryFiles ("/path/test/*.pdf")
file_rdd.flatMap(extract_func(_)).zipWithIndex.map(_._1).saveAsTextFile("/
path/result_test") |
c*********e 发帖数: 16335 | 6 spark就一工具,网站上都教你怎么用了。
)
【在 w****w 的大作中提到】 : 有点入门了,exception还要处理一下。这里实际使用spark的人看来不多。 : import my.pdf._ : import collection.JavaConverters._ : import collection.mutable._ : def extract_func ( row: (String, org.apache.spark.input.PortableDataStream) : ) = : { : val stripper = new MyStripper() : val extractor = new MyReportExtractor() : extractor.setText(stripper.getText(row._2.open));
|