如何在pyspark中从.csv使用spark.write.saveAsTable(tablename)时指定列类型

0s7z1bwu  于 2023-09-28  发布在  Spark
关注(0)|答案(2)|浏览(151)

我正在尝试从csv保存新表。不幸的是,读取和保存csv的方式,所有列类型都是字符串。数据集包含其他类型,我想在创建表时指定类型。
我已经找到了一个在创建表后更改列类型的解决方案,但它似乎并不实用。
这就是我创建表的方式:

from pyspark.sql import DataFrame

import_path = f"{st_raw}/data.csv"

sparkDF = spark.read.csv(import_path, header=True)

spark.sql(f"CREATE SCHEMA IF NOT EXISTS {catalog}.{schema}")

tablename = f"{catalog}.{schema}.{table}"
sparkDF.write.saveAsTable(tablename)

assert spark.table(tablename).count() > 0

display(spark.table(tablename))

打印模式显示,所有列都是字符串类型:

|-- Date: string (nullable = true)
 |-- Location: string (nullable = true)
 |-- Country: string (nullable = true)
 |-- Temperature: string (nullable = true)
 |-- CO2 Emissions: string (nullable = true)
 |-- Sea Level Rise: string (nullable = true)
 |-- Precipitation: string (nullable = true)
 |-- Humidity: string (nullable = true)
 |-- Wind Speed: string (nullable = true)

我需要指定正确的类型。我怎么能做到呢?

p4tfgftt

p4tfgftt1#

通常在阅读csv时,可以使用inferSchema选项来推断列的类型。正如here所解释的,它被defaut设置为false。所以你的初始数据框应该看起来像这样:

sparkDF = spark.read.option("inferSchema",True).csv(import_path, header=True)
g6baxovj

g6baxovj2#

在阅读CSV时,可以使用schema函数指定模式。这个链接有一个完整的例子。

相关问题