【问题标题】:How to read first record from .dat file transform it and finally store in HDFS如何从 .dat 文件中读取第一条记录并对其进行转换并最终存储在 HDFS 中
【发布时间】:2020-07-30 17:51:48
【问题描述】:

我正在尝试使用 spark scala shell 在 aws s3 中读取 .dat 文件,并使用 .dat 文件的第一条记录创建一个新文件。

假设我的 .dat 文件的文件路径是“s3a://filepath.dat”

我认为我的逻辑应该类似于但我无法弄清楚如何获得第一条记录。

val file = sc.textFile("s3a://filepath.dat")
val onerecord = file.getFirstRecord()
onerecord.saveAsTextFile("s3a://newfilepath.dat")

我一直在尝试遵循这些解决方案

How to skip first and last line from a dat file and make it to dataframe using scala in databricks

https://stackoverflow.com/questions/51809228/spark-scalahow-to-read-data-from-dat-file-transform-it-and-finally-store-in-h#:~:text=dat%20file%20in%20Spark%20RDD,be%20delimited%20by%20%22%20%25%24%20%22%20signs

【问题讨论】:

  • 可以使用 RDD 函数“zipWithIndex()”,过滤 index==1,或者函数“first()”,并为这个值创建新的 RDD。
  • 谢谢。我能够使用spark.read.format("csv").option("header", true).option("delimiter", "|").load("s3a://filepath.dat"),然后是res4.limit(1),最后是res5.rdd.coalesce(1, shuffle = true).saveAsTextFile("./newfile.dat") 但是这似乎创建了一个名为 newfile.dat 的目录,而不是一个 .dat 类型的文件

标签: scala apache-spark


【解决方案1】:

这取决于您的 .dat 文件中记录的分隔方式,但一般来说,您可以这样做(认为分隔符是 '|'):

val raw = session.sqlContext.read.format("csv").option("delimiter","|").load("data/input.txt")
val firstItem = raw.first()

它看起来很奇怪,但它会解决你的问题。

【讨论】:

  • 我用 spark.read.format("csv").option("header", true).option("delimiter", "|").load("s3a://filepath. dat") 并且有效。
  • 我跑了 res4.limit(1)
  • 然后运行 ​​res5.rdd.saveAsTextFile("./newfile.dat") 但它似乎创建了一个名为 newfile.dat 而不是 .dat 文件的目录。我需要一个 .dat 文件而不是目录。
猜你喜欢
  • 1970-01-01
  • 2017-11-05
  • 1970-01-01
  • 2020-04-29
  • 2011-06-27
  • 1970-01-01
  • 2014-09-06
  • 2016-01-29
  • 2020-02-09
相关资源
最近更新 更多