首页 > 解决方案 > 使用 spark-shell 在 csv 文件中转义逗号

问题描述

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

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

标签: scalacsvapache-sparkapache-spark-sql

解决方案


我建议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|
+---+----+----------------+

希望这可以帮助!


推荐阅读