【问题标题】:Escape Comma inside a csv file using spark-shell使用 spark-shell 在 csv 文件中转义逗号
【发布时间】:2019-07-20 20:44:54
【问题描述】:

我有一个包含以下两行的数据集

s.no,name,Country
101,xyz,India,IN
102,abc,UnitedStates,US

我试图转义每一列的逗号,但不是最后一列我希望它们相同并使用 spark-shell 获取输出。我尝试使用下面的代码,但它给了我不同的输出。

val df = sqlContext.read.format("com.databricks.spark.csv").option("header", "true").option("delimiter", ",").option("escape", "\"").load("/user/username/data.csv").show()

它给我的输出是

+----+-----+------------+
|s.no| name|     Country|
+----+-----+------------+
| 101|  xyz|       India|
| 102|  abc|UnitedStates|
+----+-----+------------+

但我希望输出如下所示我在这里缺少什么可以帮助我吗?

s.no name Country

101 xyz India,IN

102 abc UnitedStates,US

【问题讨论】:

  • 您为什么不阅读两个字段并稍后连接?
  • @Shankar 对不起,我没听明白你能详细说明一下

标签: scala csv apache-spark apache-spark-sql


【解决方案1】:

我建议read 提供schema 的所有字段并忽略数据中存在的标题,如下所示

case class Data (sno: String, name: String, country: String, country1: String)

val schema = Encoders.product[Data].schema

import spark.implicits._

val df = spark.read
  .option("header", true)
  .schema(schema)
  .csv("data.csv")
  .withColumn("Country" , concat ($"country", lit(", "), $"country1"))
  .drop("country1")

df.show(false)

输出:

+---+----+----------------+
|sno|name|Country         |
+---+----+----------------+
|101|xyz |India, IN       |
|102|abc |UnitedStates, US|
+---+----+----------------+

希望这会有所帮助!

【讨论】:

  • 我们是否也可以使用 sqoop 通过在 Mysql 中创建表并将其导入 hdfs 来实现这一点?
  • 对不起,我没听明白,你的意思是从其他来源读取相同的数据吗?
  • 如果我在 MySQL 数据库中有相同的数据如何使用 sqoop 导入 hdfs 来实现?
猜你喜欢
  • 1970-01-01
  • 2017-09-25
  • 1970-01-01
  • 1970-01-01
  • 2019-07-12
  • 1970-01-01
  • 1970-01-01
  • 2015-11-11
  • 1970-01-01
相关资源
最近更新 更多