繁体   English   中英

Spark Scala-textFile()和sequenceFile()RDD

[英]Spark Scala - textFile() and sequenceFile() RDDs

我已使用以下代码成功将序列文件加载到DataFrame中:

val sc = new SparkContext(conf)
val sqlContext = new org.apache.spark.sql.SQLContext(sc)
sc.sequenceFile[LongWritable,String](src)
val jsonRecs = file.map((record: (String, String)) => new String(record._2))
val df = sqlContext.read.json(jsonRecs)

我想对某些文本文件执行相同的操作。 文本文件的格式与序列文件的格式相似(时间戳,制表符和json)。 但是问题是textFile()返回的是RDD [String],而不是像sequenceFile()方法那样的RDD [LongWritable,String]。

我的目标是能够使用序列文件或文本文件作为输入来测试程序。

如何将来自textFile()的RDD [String]转换为RDD [LongWritable,String]? 还是有更好的解决方案?

假设您的文本文件是一个CSV文件,可以使用下面的代码在一个数据帧读一个CSV文件,其中spark是SparkSession:

val df = spark.read.option("header", "false").csv("file.txt")

像标题选项一样,您可以根据需要提供多个选项。 检查以获取更多详细信息。

感谢您的答复。 它不是CSV,但我想可能是。 这只是在HDFS中的序列文件上执行此操作的文本输出:

hdfs dfs -text /path/to/my/file > myFile.txt

无论如何,我找到了一个适用于我的用例的序列和文本文件的解决方案。 在两种情况下,这段代码最终都将变量'file'设置为RDD [String,String],我可以使用它。

var file = if (inputType.equalsIgnoreCase("text")) {
      sc.textFile(src).map(line => (line.split("\t")(0), line.split("\t")(1)))
} else { // Default to assuming sequence files are input
      sc.sequenceFile[String,String](src)
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM