当前位置: 首页 > 知识库问答 >
问题:

从amazon s3 bucket读取csv文件时列数据类型的更改

章心水
2023-03-14
df.printSchema()
Name --- string
City ----string

df.withColumn("created_date",current_date())

df.printSchema()
Name --- string
City --- string
created_date --- Date

df.show(2)
Name   City   created_date
Greg   MN     2020-09-13
John   NY     2020-09-13

稍后,我尝试使用pyspark从s3读取csv文件,created_date列datatype更改为timestamp。

df1 = spark.read.format("csv").option("header","true").option("delimiter",",").option("inferschema","true").load("s3://location/xxxx.csv")

df1.printSchema()
Name --- string
City --- string
created_date --- Timestamp

 df1.show(2)
 Name   City   created_date
 Greg   MN     2020-09-13 00:00:00
 John   NY     2020-09-13 00:00:00

有人知道为什么created_date列数据类型在从S3读取文件时改为timestamp而不是date吗?其实我在阅读的时候正在寻找日期数据类型,我很感激你的帮助!

共有1个答案

金阳曜
2023-03-14

该行为与S3无关,而是与Spark i在读取时如何获取数据类型有关。

在非平凡的情况下,模式推断可能会导致意外的行为,在您的例子中,created_date字段被解释为timestamp,其日期正确,但小时、分钟和秒都为0s,因为这些数字没有数据。

在读取时尝试显式设置架构:

from pyspark.sql.types import StructType, IntegerType, DateType

customSchema = StructType([
    StructField("Name", StructType()),
    StructField("City", StructType()),
    StructField("created_date", DateType())
])

df1 = spark.read.format("csv")
  .option("delimiter"," ")
  .option("header", "true")
  .schema(customSchema)
  .load("s3://location/xxxx.csv")
 类似资料:
  • 问题内容: 我正在读取csv并与mysql检查记录是否存在于我的表中或不在php中。 csv大约有25000条记录,当我运行我的代码时,它在2m 10s后显示“服务不可用”错误(加载:2m 10s) 在这里我添加了代码 注意:我只想列出表中不存在的记录。 请为我建议解决方案… 问题答案: 首先,您应该了解,在使用file_get_contents时,您会将整个数据字符串提取到一个变量中,该变量存储

  • 问题内容: 我正在从包含以下数据的CSV文件(xyz.CSV)中读取数据: 当我使用循环对其进行迭代时,我可以按以下代码逐行打印数据,并且仅打印column1数据。 通过上面的代码,我只能得到第一列。 如果我尝试打印line [1]或line [2],则会出现以下错误。 请建议打印列2或列3的数据。 问题答案: 这是我获得第二列和第三列的方法: 结果如下:

  • 我正在尝试读取Mac上pig shell上的csv文件。我所做的只是文件到变量中,然后变量。我是这样做的: 我使用的数据是从这里提供的github下载的 此文件在我的Mac上的本地安装的hdfs中可用。当我执行时,我得到一个错误: org.apache.pig.impl.logicallayer.FrontendException:错误1066:无法打开别名影片的迭代器 在org.apache.p

  • 问题内容: 当我从CSV文件读回数据时,每个单元格都被解释为字符串。 如何自动将读取的数据转换为正确的类型? 或者更好:我如何告诉csv阅读器每列的正确数据类型? (我写了一个二维列表,其中每一列属于不同类型(bool,str,int,整数列表),输出到CSV文件中。) 样本数据(在CSV文件中): 问题答案: 如文档所述,CSV阅读器不会执行自动数据转换。您具有QUOTE_NONNUMERIC格

  • 我想从多列csv文件中读取特定列,并使用Java在其他csv文件中打印这些列。需要帮忙吗?下面是我逐行打印每个令牌的代码。。但我希望只打印多列csv中的几列。

  • 我是R的新手,想读一个csv文件。但是当我试图阅读它时,我遇到了错误。我的csv文件如下: 当我在RStudio中使用此命令时,我得到了错误:命令: 错误: 读取时出错。表(file=file,header=header,sep=sep,quote=quote,:不允许重复的“row.names” 我还尝试删除错误并使用此命令: 但是当我查看输出时,它不能保持方阵的结构。你能帮我做什么吗?