python - 尝试在 Azure Databricks DBFS 中导入 CSV 时出现 NULL 值
问题描述
我正在尝试将没有标头的 CSV 文件导入 Azure Databricks 的 DBFS,但是,无论我是使用 UI 还是尝试通过代码执行此操作,输出都会显示所有四列的空值。
这是我运行的代码:
from pyspark.sql.types import *
# File location and type
file_location = "/FileStore/tables/sales.csv"
file_type = "csv"
# Options
delimiter = ","
customSchema = StructType([\
StructField("id", StringType(), True),\
StructField("company", IntegerType(), True),\
StructField("date", TimestampType(), True),\
StructField("price", DoubleType(), True)])
# Dataframe from CSV
df = spark.read.format(file_type) \
.schema(customSchema) \
.option("sep", delimiter) \
.load(file_location)
display(df)
我得到的输出是:
这里发生了什么?如果我没有定义任何模式,它会完美地加载数据,但是我既没有机会指定标头也没有指定数据类型。
解决方案
我上传了一个示例 csv 文件来测试您的脚本,其内容如下。
1,Company-A,2019-09-30,10.01
2,Company-B,2019-09-29,20.02
然后,我尝试成功重现您的问题,如下图所示,我认为该问题是由 struct field 的类型不正确引起的company
。
所以我尝试使用StringType
而不是IntegerType
for field company
,然后它工作正常,如下图所示。
同时,如果该date
字段的值只是一个日期,您可以使用DateType
代替,TimestampType
结果如下图所示。
顺便说一句,还有其他两种解决方案可以满足您的需求。
使用
spark.read.csv
带schema
参数的函数读取无头csv文件,如下代码和图。df = spark.read.csv(file_location, schema='id INT, company STRING, date DATE, price DOUBLE') display(df)
首先使用
pandas
package 从 Azure Databricks 上的文件路径读取 csv 文件dbfs
,然后从 pandas 数据帧创建 Spark DataFrame,如下图所示。import pandas as pd df_pandas = pd.read_csv('/dbfs/FileStore/tables/sales.csv', header=None, names = ['id', 'company', 'date', 'price']) df = spark.createDataFrame(df_pandas) display(df)
推荐阅读
- ssl - 将 ssl 与 Postman 和 GET 一起使用
- jmeter - 清除在 jmeter 中为循环控制器的每次迭代创建的会话
- ruby-on-rails - rails config/environments 'config' 定义在哪里?
- c# - asp.net core 操作中参数的映射命名约定
- c# - EWS 托管 API - 删除附加邮件中的附件
- reactjs - 如果多个电子邮件与同一帐户关联,则获取登录用户的电子邮件地址
- swift - 无法覆盖 prefersHomeIndicatorAutoHidden() 方法
- ruby-on-rails - will_paginate 在帖子分页时删除组中的帖子
- c# - 使用 MVVM 更改按钮 BackgroundColor
- php - 在 Wordpress 自定义中增加主题允许的可用字体类型的数量