【问题标题】:Special character as file delimiter in spark特殊字符作为spark中的文件分隔符
【发布时间】:2017-08-24 13:19:11
【问题描述】:

我有带有特殊分隔符的文本文件:

35¡1682¡231¡20.00000000¡50.00000000¡0.00000000¡0.00000000¡304.1100¡333.110000
¡I¡1¡0¡10¡SHORT NAME
1105682¡0¡100000.00000000¡100000.00000000¡1105682¡D¡D

我想根据存在的特殊分隔符¡ 在 spark 中拆分此文件。 请提出解决方法。 此命令的输出为

val input_header = sc.textFile(path).first()

当我在 RDD 中读取这个文件并显示它的内容时。其显示分隔符为?

【问题讨论】:

标签: hadoop apache-spark pyspark apache-spark-sql spark-dataframe


【解决方案1】:

您可以将文件读取为集合位和位到提供编码的字符串。 如果你使用 scala API,它会是这样的

val inputHeader = sc.binaryFiles(path).mapValues(line => new String(line.toArray(), StandardCharsets.{your charset})

然后您可以确保 Spark 已正确读取您的文件

inputHeader.first

【讨论】:

  • 这里,我们在哪里指定了分隔符。?我的平台是 Unix,所以字符集应该是 UTF_8 对吧?
  • 导入 java.nio.charset._ val input_header = sc.binaryFiles("hdfs:///user/pandvini_adm/B%52%41IN%53D%41ILY_BW_a12_NT%46_rnv_20160514_20160520121442.dat")。 mapValues(line => new String((line.toArray(),"utf-8"))) 但是得到类似 :31 的错误:错误:重载方法构造函数 String 有替代方案:(x$1: StringBuilder)String (x$1: StringBuffer)String (x$1: Array[Byte])String (x$1: Array[Char])String (x$1: String)String不能应用于( (Array[Byte], String)) mapValues(line => new String((line.toArray(),"utf-8")))
  • 你不应该使用像“utf-8”这样的字符串。您应该使用已定义的字符集之一,例如 StandardCharsets.UTF_8。或者你可以使用 Charset.forName("utf-8")
  • @vinitkumar :如果你还可以考虑接受答案。它也将是指向其他用户的指针。如果不评论你的问题。
猜你喜欢
  • 2017-11-21
  • 1970-01-01
  • 1970-01-01
  • 2017-05-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-07
  • 1970-01-01
相关资源
最近更新 更多