无法在pyspark中显示CSV文件(ValueError:某些类型无法由前100行确定,请通过采样重试)

时间:2019-02-21 19:14:07

标签: csv pyspark databricks azure-databricks

通过Pyspark显示CSV文件时出现错误。我已附加了我使用的PySpark代码和CSV文件。

from pyspark.sql import *
spark.conf.set("fs.azure.account.key.xxocxxxxxxx","xxxxx")

time_on_site_tablepath= "wasbs://dwpocblob@dwadfpoc.blob.core.windows.net/time_on_site.csv"
time_on_site = spark.read.format("csv").options(header='true', inferSchema='true').load(time_on_site_tablepath)

display(time_on_site.head(50))

错误如下所示

ValueError: Some of types cannot be determined by the first 100 rows, please try again with sampling

CSV文件格式附在下面

time_on_site:pyspark.sql.dataframe.DataFrame

next_eventdate:timestamp
barcode:integer
eventdate:timestamp
sno:integer
eventaction:string
next_action:string
next_deviceid:integer
next_device:string
type_flag:string
site:string
location:string
flag_perimeter:integer
deviceid:integer
device:string
tran_text:string
flag:integer
timespent_sec:integer
gg:integer

CSV文件数据附在下面

next_eventdate,barcode,eventdate,sno,eventaction,next_action,next_deviceid,next_device,type_flag,site,location,flag_perimeter,deviceid,device,tran_text,flag,timespent_sec,gg
2018-03-16 05:23:34.000,1998296,2018-03-14 18:50:29.000,1,IN,OUT,2,AGATE-R02-AP-Vehicle_Exit,,NULL,NULL,1,1,AGATE-R01-AP-Vehicle_Entry,Access Granted,0,124385,0
2018-03-17 07:22:16.000,1998296,2018-03-16 18:41:09.000,3,IN,OUT,2,AGATE-R02-AP-Vehicle_Exit,,NULL,NULL,1,1,AGATE-R01-AP-Vehicle_Entry,Access Granted,0,45667,0
2018-03-19 07:23:55.000,1998296,2018-03-17 18:36:17.000,6,IN,OUT,2,AGATE-R02-AP-Vehicle_Exit,,NULL,NULL,1,1,AGATE-R01-AP-Vehicle_Entry,Access Granted,1,132458,1
2018-03-21 07:25:04.000,1998296,2018-03-19 18:23:26.000,8,IN,OUT,2,AGATE-R02-AP-Vehicle_Exit,,NULL,NULL,1,1,AGATE-R01-AP-Vehicle_Entry,Access Granted,0,133298,0
2018-03-24 07:33:38.000,1998296,2018-03-23 18:39:04.000,10,IN,OUT,2,AGATE-R02-AP-Vehicle_Exit,,NULL,NULL,1,1,AGATE-R01-AP-Vehicle_Entry,Access Granted,0,46474,0

如何成功加载CSV文件?

2 个答案:

答案 0 :(得分:0)

语法没有问题,可以正常工作。 问题出在您的CSV文件数据中,其中名为type_flag的列仅具有None(null)值,因此不会推断出它的数据类型。

所以,这里有两个选择。

  1. 您可以显示数据而无需使用head()。喜欢 display(time_on_site)

  2. 如果要使用head(),则需要替换空值,这里我将其替换为空string('')。

    time_on_site = time_on_site.fillna('') display(time_on_site.head(50))

答案 1 :(得分:0)

出于某种原因,可能是一个错误,即使您在 spark.read.schema(my_schema).csv('path') 调用中提供了架构 您在 display(df.head()) 调用中遇到相同的错误 display(df) 虽然有效,但它给了我一个 WTF 时刻。