我尝试使用PySpark读取一个包含许多列的CSV文件。inferschema
选项在推断大多数列的数据类型方面非常出色。如果我只想覆盖其中一个被错误推断的列类型,最好的方法是什么?
我有这段代码,但它使PySpark只导入模式中指定的一个列,这不是我想要的。
schema = StructType() \
.add("column_one_of_many", StringType(), True)
spark.read.format('com.databricks.spark.csv') \
.option('delimited',',') \
.option('header','true') \
.option('inferschema', 'true') \
.schema(self.schema) \
.load('dbfs:/FileStore/some.csv')
我的要求有可能吗?
谢谢你的时间和指导:)
2条答案
按热度按时间wydwbb8l1#
更简单的方法是使用
.withColumn
并将column_one_of_many
转换为字符串。一米二米一x
另一种方法是定义schema中的所有列,然后排除
inferschema
,只需使用**.schema
**选项来读取csv文件。wrrgggsh2#
或者你可以先在
inferSchema
打开的情况下读取它,修改schema,然后再次加载csv:例如,让我们将第一列(索引为
0
)从IntegerType
更改为StringType
:然后,使用修改后的schema重新加载csv:
当然,您可以通过选择正确的索引来修改任何列的数据类型。这种方法比强制转换更好,因为您可能会因原始类型推断而丢失信息(例如,以零开头的邮政编码)。