Python Databricks pyspark,使用header='时Dataframe.count()和Display(Dataframe)结果的差异;假';
我正在通过以下代码读取dataframe中的CSV(存在于Azure datalake store上)文件:Python Databricks pyspark,使用header='时Dataframe.count()和Display(Dataframe)结果的差异;假';,python,pyspark,apache-spark-sql,databricks,azure-databricks,Python,Pyspark,Apache Spark Sql,Databricks,Azure Databricks,我正在通过以下代码读取dataframe中的CSV(存在于Azure datalake store上)文件: df = spark.read.load(filepath, format="csv", schema = mySchema, header="false", mode="DROPMALFORMED"); 文件路径包含100行和标题。我想在读取时忽略文件的头,所以我定义了header=“false”。(有时文件带有头,有时不带
df = spark.read.load(filepath, format="csv", schema = mySchema, header="false", mode="DROPMALFORMED");
文件路径包含100行和标题。我想在读取时忽略文件的头,所以我定义了header=“false”
。(有时文件带有头,有时不带有头)
当我通过display(df)语句显示dataframe时,我读取了dataframe中的数据,并显示了100行,这是正确的。但当我使用df.count()检查数据帧的计数时,它显示了101行。dataframe是否显示带有标题的计数?还是我遗漏了什么
mySchema和filepath已在单元格中单独定义。根据pyspark文档 您可能需要标准化获取数据的方式,无论是有头还是无头,然后设置标志 如果您将header设置为False,则spark引擎将只读取第一行作为数据行 要回答您的问题,Dataframe count不计算标头。 我建议先读取数据,然后删除标题以进行调试 另外,
display(df)
是Ipython提供的python操作,我会使用spark提供的实用程序进行调试的dataframe.show()
。在读取csv文件时使用mode=“DROPMALFORMED”
- 当存在一些格式不正确的记录时,spark会在
df.show()中将其删除,但会在df.count()中对其进行计数。
- 在您的情况下,as标头为false,并且指定了架构,所以spark按照您指定的类型读取数据。如果存在问题,则不会显示记录
示例:
#sample data
#cat employee.csv
#id,name,salary,deptid
#1,a,1000,101
#2,b,2000,201
ss=StructType([StructField("id",IntegerType()),StructField("name",StringType()),StructField("salary",StringType()),StructField("deptid",StringType())])
df=spark.read.load("employee.csv",format="csv",schema=ss,header="false",mode="DROPMALFORMED")
df.show()
#+---+----+------+------+
#| id|name|salary|deptid|
#+---+----+------+------+
#| 1| a| 1000| 101|
#| 2| b| 2000| 201|
#+---+----+------+------+
#issue in df.count
df.count()
#3 #has to be 2
修复:
#sample data
#cat employee.csv
#id,name,salary,deptid
#1,a,1000,101
#2,b,2000,201
ss=StructType([StructField("id",IntegerType()),StructField("name",StringType()),StructField("salary",StringType()),StructField("deptid",StringType())])
df=spark.read.load("employee.csv",format="csv",schema=ss,header="false",mode="DROPMALFORMED")
df.show()
#+---+----+------+------+
#| id|name|salary|deptid|
#+---+----+------+------+
#| 1| a| 1000| 101|
#| 2| b| 2000| 201|
#+---+----+------+------+
#issue in df.count
df.count()
#3 #has to be 2
读取数据帧时添加notNull
过滤器
df=spark.read.load("employee.csv",format="csv",schema=ss,header="false",mode="DROPMALFORMED").filter(col("id").isNotNull())
df.show()
#+---+----+------+------+
#| id|name|salary|deptid|
#+---+----+------+------+
#| 1| a| 1000| 101|
#| 2| b| 2000| 201|
#+---+----+------+------+
#fixed count
df.count()
#2
要查看格式错误的数据,请删除模式:
spark.read.load("employee.csv",format="csv",schema= mySchema,header="false").show(100,False)