当使用文本中的换行符以CSV格式读取时,Spark会创建新行

时间:2017-07-19 21:08:37

标签: scala csv apache-spark

所以,这个问题已经被讨论了很多,但它应该在Spark 2.2.0中修复,它刚刚发布。据我所知,wholeLine选项应该可以解决这个问题,但是我没有运气。问题在于,如果某个值中存在换行符,例如,其中包含一堆文本的notes列,并且这些笔记中有换行符,则Spark会将其视为新行。< / p>

以下是我用来从CSV中读取数据的代码段。

sparkSession.read
  .option("header", "true")
  .option("delimiter", ",")
  .option("multiLine", "true")
  .option("inferSchema", true)
  .option("wholeFile", "true")
  .option("quoteMode", "ALL")
  .option("parserLib", "univocity")
  .csv(csvFilePath)

正如您所知,我在阳光下使用了每个选项,但我仍然得到错误的输出。我得到的输出在下面,这些都应该是唯一的整数,但它们被来自另一行的其他列的数据污染。我稍微更改了数据,但您可以看到列中包含ID的字符串数据。

+--------------------+
|                  ID|
+--------------------+
|             3876849|
|             3876872|
|          consistent|
|                4/30|
|,blah blah blah  ...|
|             3876876|
|             3876878|
|       5-6 days ago"|
|             3876879|
|             3876880|
|blah blah blah bl...|
|             3876893|
|*blah blah blah  ...|
|             3876900|
|             3876904|
+--------------------+

这让我非常难过,好吧,我也包括我的build.sbt。

name := "MyApp"
organization := "com.test"
version := "1.0-SNAPSHOT"
scalaVersion := "2.11.8"

libraryDependencies ++= Seq(
  "org.apache.spark" % "spark-core_2.11" % "2.2.0" % "provided",
  "org.apache.spark" % "spark-sql_2.11" % "2.2.0" % "provided",
  "org.apache.spark" % "spark-hive_2.11" % "2.2.0" % "provided",
  "org.elasticsearch" % "elasticsearch-spark-20_2.11" % "5.5.0",
  "org.apache.logging.log4j" % "log4j-core" %"2.8.2"
)
assemblyMergeStrategy in assembly := {
  case PathList("META-INF", xs @ _*) => MergeStrategy.discard
  case x => MergeStrategy.first
}

assemblyOption in assembly := (assemblyOption in assembly).value.copy(includeScala = false)

0 个答案:

没有答案