Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/285.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Databricks pyspark,使用header='时Dataframe.count()和Display(Dataframe)结果的差异;假';_Python_Pyspark_Apache Spark Sql_Databricks_Azure Databricks - Fatal编程技术网

Python Databricks pyspark,使用header='时Dataframe.count()和Display(Dataframe)结果的差异;假';

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”。(有时文件带有头,有时不带

我正在通过以下代码读取dataframe中的CSV(存在于Azure datalake store上)文件:

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)