首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >读取包含pyspark中字符串数组的csv

读取包含pyspark中字符串数组的csv
EN

Stack Overflow用户
提问于 2022-04-22 13:35:52
回答 2查看 818关注 0票数 2

我正在尝试读取具有以下数据的csv:

代码语言:javascript
复制
name,date,win,stops,cost
a,2020-1-1,true,"[""x"", ""y"", ""z""]", 2.3
b,2021-3-1,true,, 1.3
c,2023-2-1,true,"[""x""]", 0.3
d,2021-3-1,true,"[""z""]", 2.3

使用inferSchema会导致停止字段溢出到下一列,并破坏数据格式。

如果我给出我自己的模式,比如:

代码语言:javascript
复制
    schema = StructType([
    StructField('name', StringType()),
    StructField('date', TimestampType()),
    StructField('win', Booleantype()),
    StructField('stops', ArrayType(StringType())),
    StructField('cost', DoubleType())])

这一例外的结果是:

pyspark.sql.utils.AnalysisException: CSV data source does not support array<string> data type.

那么,如果没有这种失败,我如何正确地阅读csv呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-04-22 15:15:58

因为csv不支持数组,所以您需要首先读取为字符串,然后转换它。

代码语言:javascript
复制
# You need to set escape option to ", since it is not the default escape character (\). 
df = spark.read.csv('file.csv', header=True, escape='"')

df = df.withColumn('stops', F.from_json('stops', ArrayType(StringType())))
票数 4
EN

Stack Overflow用户

发布于 2022-04-22 14:03:00

我想这就是你要找的:

代码语言:javascript
复制
from pyspark.sql import SparkSession
spark = SparkSession.builder.appName('abc').getOrCreate()


dataframe = spark.read.options(header='True', delimiter=",").csv("file_name.csv")

dataframe.printSchema()

如果有帮助请告诉我

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

https://stackoverflow.com/questions/71969652

复制
相关文章

相似问题

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