gpt4 book ai didi

scala - 如何在 CSV 中使用双管道作为分隔符?

转载 作者:行者123 更新时间:2023-12-04 14:09:31 28 4
gpt4 key购买 nike

Spark 1.5 和 Scala 2.10.6

我有一个使用“||”作为分隔符的数据文件。我很难通过这个解析来创建一个数据框。可以使用多个分隔符来创建数据框吗?该代码适用于单个损坏的管道,但不适用于多个分隔符。

我的代码:

val customSchema_1 = StructType(Array(
StructField("ID", StringType, true),
StructField("FILLER", StringType, true),
StructField("CODE", StringType, true)));

val df_1 = sqlContext.read
.format("com.databricks.spark.csv")
.schema(customSchema_1)
.option("delimiter", "¦¦")
.load("example.txt")

示例文件:
12345¦¦  ¦¦10

最佳答案

我遇到了这个问题并找到了一个很好的解决方案,我使用的是 spark 2.3,我觉得它应该适用于所有 spark 2.2+,但尚未对其进行测试。它的工作方式是我替换 ||tab然后内置的 csv 可以取一个 Dataset[String] .我使用制表符是因为我的数据中有逗号。

var df = spark.sqlContext.read
.option("header", "true")
.option("inferSchema", "true")
.option("delimiter", "\t")
.csv(spark.sqlContext.read.textFile("filename")
.map(line => line.split("\\|\\|").mkString("\t")))
希望这对其他人有帮助。
编辑:
从 spark 3.0.1 开始,这是开箱即用的。
例子:
val ds = List("name||id", "foo||12", "brian||34", """"cray||name"||123""", "cray||name||123").toDS
ds: org.apache.spark.sql.Dataset[String] = [value: string]

val csv = spark.read.option("header", "true").option("inferSchema", "true").option("delimiter", "||").csv(ds)
csv: org.apache.spark.sql.DataFrame = [name: string, id: string]

csv.show
+----------+----+
| name| id|
+----------+----+
| foo| 12|
| brian| 34|
|cray||name| 123|
| cray|name|
+----------+----+

关于scala - 如何在 CSV 中使用双管道作为分隔符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41268182/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com