Scala 将保存的文本文件从Spark程序读入另一个程序
我写了一个Spark程序,它接收一些输入,对数据做各种处理,在处理结束时,我有一个Scala 将保存的文本文件从Spark程序读入另一个程序,scala,apache-spark,Scala,Apache Spark,我写了一个Spark程序,它接收一些输入,对数据做各种处理,在处理结束时,我有一个 val processedData = ... processedData的类型为RDD[(Key,List[Data]),其中Key和Data是我定义的case类 然后我打了电话 processedData.saveAsTextFile(location) 在那个位置有一个文件夹,其中包含一个成功文件和54个零件文件,我希望看到这些文件 现在,在另一个程序中,我刚刚开始编写对我的输出进行统计分析的程序,我从
val processedData = ...
processedData的类型为RDD[(Key,List[Data]),其中Key和Data是我定义的case类
然后我打了电话
processedData.saveAsTextFile(location)
在那个位置有一个文件夹,其中包含一个成功文件和54个零件文件,我希望看到这些文件
现在,在另一个程序中,我刚刚开始编写对我的输出进行统计分析的程序,我从以下内容开始:
val groupedData = sc.textFile(location).cache()
然而,我的IDE(正确地)认为groupedData是RDD[String]类型
告诉编译器/IDE groupedData是RDD[(Key,List[Data])类型的惯用方法是什么?回放:
scala> sc.parallelize(List(1,2,3).zip(List("abc","def","ghi")))
res0: org.apache.spark.rdd.RDD[(Int, String)] = ParallelCollectionRDD[0] at parallelize at <console>:22
scala> res0.collect
res1: Array[(Int, String)] = Array((1,abc), (2,def), (3,ghi))
scala> res0.saveAsTextFile("file")
scala> sc.textFile("file")
res3: org.apache.spark.rdd.RDD[String] = file MapPartitionsRDD[3] at textFile at <console>:22
scala> res3.collect
res4: Array[String] = Array((1,abc), (2,def), (3,ghi))
scala>sc.parallelize(列表(1,2,3).zip(列表(“abc”、“def”、“ghi”))
res0:org.apache.spark.rdd.rdd[(Int,String)]=ParallelCollectionRDD[0]位于parallelize at:22
scala>res0.collect
res1:Array[(Int,String)]=数组((1,abc),(2,def),(3,ghi))
scala>res0.saveAsTextFile(“文件”)
scala>sc.textFile(“文件”)
res3:org.apache.spark.rdd.rdd[String]=textFile at:22处的文件MapPartitionsRDD[3]
scala>res3.collect
res4:Array[String]=数组((1,abc),(2,def),(3,ghi))
结果是简单的字符串作为toString方法表示。文件:
def saveAsTextFile(路径:字符串):单位
将此RDD另存为文本文件,即元素的字符串表示形式
如何解决:
scala> res0.saveAsObjectFile("file1")
scala> sc.objectFile[(Int,String)]("file1")
res9: org.apache.spark.rdd.RDD[(Int, String)] = MapPartitionsRDD[11] at objectFile at <console>:22
scala> res9.collect
res10: Array[(Int, String)] = Array((1,abc), (2,def), (3,ghi))
scala>res0.saveAsObject文件(“文件1”)
scala>sc.objectFile[(Int,String)](“文件1”)
res9:org.apache.spark.rdd.rdd[(Int,String)]=MapPartitionsRDD[11]位于22处的objectFile
scala>res9.collect
res10:Array[(Int,String)]=数组((1,abc),(2,def),(3,ghi))
文件:
def saveAsObjectFile(路径:字符串):单位
将此RDD另存为一组序列化对象
注意,从文件读取时必须指定类型参数。反序列化是必要的。Spark想知道要检索的内容。播放:
scala> sc.parallelize(List(1,2,3).zip(List("abc","def","ghi")))
res0: org.apache.spark.rdd.RDD[(Int, String)] = ParallelCollectionRDD[0] at parallelize at <console>:22
scala> res0.collect
res1: Array[(Int, String)] = Array((1,abc), (2,def), (3,ghi))
scala> res0.saveAsTextFile("file")
scala> sc.textFile("file")
res3: org.apache.spark.rdd.RDD[String] = file MapPartitionsRDD[3] at textFile at <console>:22
scala> res3.collect
res4: Array[String] = Array((1,abc), (2,def), (3,ghi))
scala>sc.parallelize(列表(1,2,3).zip(列表(“abc”、“def”、“ghi”))
res0:org.apache.spark.rdd.rdd[(Int,String)]=ParallelCollectionRDD[0]位于parallelize at:22
scala>res0.collect
res1:Array[(Int,String)]=数组((1,abc),(2,def),(3,ghi))
scala>res0.saveAsTextFile(“文件”)
scala>sc.textFile(“文件”)
res3:org.apache.spark.rdd.rdd[String]=textFile at:22处的文件MapPartitionsRDD[3]
scala>res3.collect
res4:Array[String]=数组((1,abc),(2,def),(3,ghi))
结果是简单的字符串作为toString方法表示。文件:
def saveAsTextFile(路径:字符串):单位
将此RDD另存为文本文件,即元素的字符串表示形式
如何解决:
scala> res0.saveAsObjectFile("file1")
scala> sc.objectFile[(Int,String)]("file1")
res9: org.apache.spark.rdd.RDD[(Int, String)] = MapPartitionsRDD[11] at objectFile at <console>:22
scala> res9.collect
res10: Array[(Int, String)] = Array((1,abc), (2,def), (3,ghi))
scala>res0.saveAsObject文件(“文件1”)
scala>sc.objectFile[(Int,String)](“文件1”)
res9:org.apache.spark.rdd.rdd[(Int,String)]=MapPartitionsRDD[11]位于22处的objectFile
scala>res9.collect
res10:Array[(Int,String)]=数组((1,abc),(2,def),(3,ghi))
文件:
def saveAsObjectFile(路径:字符串):单位
将此RDD另存为一组序列化对象
注意,从文件读取时必须指定类型参数。反序列化是必要的。Spark想知道要检索什么