【问题标题】:Read csv file in spark with comma in fields用逗号在字段中读取 csv 文件
【发布时间】:2020-06-23 19:17:17
【问题描述】:

我有以下数据,需要准备一个schema文件来读取spark中的数据。

id, date, producttype, description
1, 02/01/2020,Standard,["ABC, PQR"]
2, 03/02/2020,Standard,["ABC, PQR"]
3, 20/02/2020,Standard,["ABC, PQR"]

我准备的架构文件是:

COLUMN_ID, COLUMN_NAME, DATA_TYPE, DATA_LENGTH, NULLABLE, PRECISION, DATA_SCALE
1, id, NUMBER,,N,38,0
2, date,VARCHAR2,15,N,,
3, producttype, VARCHAR2,10,N,,
4, description, VARCHAR2,15,N,,

要在 spark 中验证此数据,我使用以下命令:

val schema_a = StructType(List(StructField("id",IntegerType,true),
StructField("date",StringType,true),
StructField("producttype",StringType,true),
StructField("description",StringType,true)))

数据放在 S3 桶中

a_read_schema = 
spark.read.format("csv").option("delimiter","π").schema(schema_a).load("s3://data/202003110000")

读取该文件后的输出如下:

a_read_schema.show()

id, date, producttype, description
1, 02/01/2020,Standard,[ABCπ PQR]
2, 03/02/2020,Standard,[ABCπ PQR]
3, 20/02/2020,Standard,[ABCπ PQR]

如何获取包含逗号的列描述?

【问题讨论】:

  • 你是如何使用你的架构文件的?
  • @EdgarRamírezMondragón Schema 文件放置在 EMR 中,并且有一个包装脚本使用 talend 与 S3 比较模式来获取数据。
  • 试试 StructField("description",ArrayType(StringType())
  • @MohammadMurtazaHashmi 我已经试过了。这不适用于 CSV 文件。

标签: python csv apache-spark amazon-s3 parquet


【解决方案1】:

我猜没有可用的功能。 cmets 中提到的 ArrayType 不适用于 csv 数据类型。

另一种方法是读取逗号分隔的文件,然后连接最后两列。

这可以通过以下方式实现:

 val schema_a = StructType(List(StructField("id",StringType,true),
                                StructField("date",StringType,true),
                                StructField("producttype",StringType,true),
                                StructField("description1",StringType,true),
                                StructField("description2",StringType,true)))


spark.read.option("delimiter",",").schema(schema_a)
.csv(your-file-path)
.withColumn("description", concat_ws(",", col("description1"), col("description2")))
.drop("description1", "description2")
.show()

【讨论】:

    猜你喜欢
    • 2012-01-08
    • 1970-01-01
    • 2013-01-02
    • 1970-01-01
    • 2017-03-17
    • 2019-03-13
    • 1970-01-01
    • 2021-06-16
    • 1970-01-01
    相关资源
    最近更新 更多