首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在spark中读取带有多个分隔符的CSV文件

如何在spark中读取带有多个分隔符的CSV文件
EN

Stack Overflow用户
提问于 2020-04-06 18:23:53
回答 2查看 2.1K关注 0票数 1

我正在尝试使用spark 1.6读取CSV文件

代码语言:javascript
运行
复制
s.no|Name$id|designation|salry
1   |abc$12 |xxx        |yyy
代码语言:javascript
运行
复制
val df = spark.read.format("csv")
  .option("header","true")
  .option("delimiter","|")
  .load("path")

如果我添加了带有$ it抛出错误的分隔符,则允许一个分隔符

EN

回答 2

Stack Overflow用户

发布于 2020-04-06 19:27:17

在使用主分隔符(为了更好地理解,我引用"|“作为主分隔符)从源中读取数据帧之后,您可以应用操作。

您可以执行如下操作:

sc是Sparksession

代码语言:javascript
运行
复制
val inputDF = sc.read.option("inferSchema", "true")
.option("header", "true")
.option("delimiter", "|")
.csv("/path/to/your/file")

val modifiedDF = inputDF
.withColumn("Name", split(inputDF.col("Name$id"), "\\$")(0))
.withColumn("id", split(inputDF.col("Name$id"), "\\$")(1)).drop("Name$id")

modifiedDF.show(false) will give you the required output

尽管这可能会导致数据被错误地拆分,因为数据中存在有效的"$“符号,而该符号被错误地视为分隔符。因此,您应该在这些情况下使用预防措施。

有一个库,不记得它的名字,但它可以是单一的,这让你可以选择将多个符号作为单个分隔符,比如#@作为分隔符。如果您的用例是为每一列使用多个分隔符,您可以稍微搜索一下。

票数 2
EN

Stack Overflow用户

发布于 2020-04-06 18:53:51

我能问一下你为什么要用spark 1.6吗?无论如何,在读取csv格式时,只允许使用一个分隔符。

如果它是一个特定的列,您知道它有一列,其值的格式为: name$id

也许可以尝试在该列上运行一些逻辑,并获得具有2个新列的df

设置df

代码语言:javascript
运行
复制
al df = sc.parallelize(a).toDF("nameid")
df: org.apache.spark.sql.DataFrame = [nameid: string]

尝试如下所示:

代码语言:javascript
运行
复制
df.withColumn("name",substring_index(col("nameid"), "$", 1)).withColumn("id", substring_index(col("nameid"), "$", -1)).show

和输出

代码语言:javascript
运行
复制
+-------+----+---+
| nameid|name| id|
+-------+----+---+
|name$id|name| id|
+-------+----+---+

您还可以在此之后删除原始列

希望这能有所帮助

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61057630

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档