spark: dataframe.count 比逐行打印或 show() 产生更多的行
spark: dataframe.count yields way more rows than printing line by line or show()
Spark 新手;使用数据块。真是百思不得其解。
我有这个数据框:df.
df.count()
收益率 Long = 5460
但是如果我逐行打印:
df.collect.foreach(println)
我只打印了 541 行。同样,df.show(5460)
只显示 1017 行。可能是什么原因?
相关问题:如何使用 Databricks 保存 "df"?它保存到哪里? -- 我之前尝试过保存,但之后找不到文件。如果相关的话,我会通过安装 S3 存储桶来加载数据。
差异可能是错误的源数据。 Spark 本质上是懒惰的,所以它不会构建一堆列并填充它们只是为了计算行数。因此,当您实际针对数据或行或 null 执行时,数据可能无法解析。或者您的架构不允许某些列为空,并且在数据被完全解析时它们为空。或者您正在修改计数、收集和显示之间的数据。只是没有足够的细节来确定。您可以打开一个 spark shell 并创建一小段数据,然后通过将该数据转换为数据框来测试这些条件。更改架构以允许和不允许空值或在源数据中添加空值而不是空值。制作源数据字符串,但使模式需要整数。
就保存数据框而言。您使用 write 创建一个数据框编写器,然后定义要将其保存为的文件类型,然后定义文件名。此示例保存镶木地板文件。此处允许的文件类型和写入选项还有许多其他选项。
df.write.parquet("s3://myfile")
关于你的第一个问题,Databricks 输出默认截断。这既适用于单元格中的文本输出,也适用于 display()
的输出。我相信 .count()
.
关于你的第二个问题,你可以在 Databricks 上保存四种类型的位置:
使用 df.write.saveAsTable()
到 Hive 管理的表。这些将最终出现在由 Databricks 管理的 S3 存储桶中,该存储桶已安装到 /user/hive/warehouse
。请注意,您将无权访问 AWS 凭证以使用该存储桶。但是,如果需要,您可以使用 Databricks 文件实用程序 (dbutils.fs.*
) 或 Hadoop 文件系统 API 来处理这些文件。
本地 SSD 存储。最好使用 persist()
或 cache()
来完成,但是,如果您真的需要,您可以使用 df.write.save("/dbfs/tmp/...")
.
[ 写入,例如 /tmp
=40=]
您自己的 S3 存储桶,需要挂载。
到 /FileStore/
,这是唯一可以直接从集群下载的 "directory"。这很有用,例如,用于编写要立即导入 Excel 的 CSV 文件。你写文件,输出一个"Download File"HTMLlink到你的笔记本
有关详细信息,请参阅 Databricks FileSystem Guide。
Spark 新手;使用数据块。真是百思不得其解。
我有这个数据框:df.
df.count()
收益率 Long = 5460
但是如果我逐行打印:
df.collect.foreach(println)
我只打印了 541 行。同样,df.show(5460)
只显示 1017 行。可能是什么原因?
相关问题:如何使用 Databricks 保存 "df"?它保存到哪里? -- 我之前尝试过保存,但之后找不到文件。如果相关的话,我会通过安装 S3 存储桶来加载数据。
差异可能是错误的源数据。 Spark 本质上是懒惰的,所以它不会构建一堆列并填充它们只是为了计算行数。因此,当您实际针对数据或行或 null 执行时,数据可能无法解析。或者您的架构不允许某些列为空,并且在数据被完全解析时它们为空。或者您正在修改计数、收集和显示之间的数据。只是没有足够的细节来确定。您可以打开一个 spark shell 并创建一小段数据,然后通过将该数据转换为数据框来测试这些条件。更改架构以允许和不允许空值或在源数据中添加空值而不是空值。制作源数据字符串,但使模式需要整数。
就保存数据框而言。您使用 write 创建一个数据框编写器,然后定义要将其保存为的文件类型,然后定义文件名。此示例保存镶木地板文件。此处允许的文件类型和写入选项还有许多其他选项。
df.write.parquet("s3://myfile")
关于你的第一个问题,Databricks 输出默认截断。这既适用于单元格中的文本输出,也适用于 display()
的输出。我相信 .count()
.
关于你的第二个问题,你可以在 Databricks 上保存四种类型的位置:
使用
df.write.saveAsTable()
到 Hive 管理的表。这些将最终出现在由 Databricks 管理的 S3 存储桶中,该存储桶已安装到/user/hive/warehouse
。请注意,您将无权访问 AWS 凭证以使用该存储桶。但是,如果需要,您可以使用 Databricks 文件实用程序 (dbutils.fs.*
) 或 Hadoop 文件系统 API 来处理这些文件。本地 SSD 存储。最好使用
[ 写入,例如persist()
或cache()
来完成,但是,如果您真的需要,您可以使用df.write.save("/dbfs/tmp/...")
./tmp
=40=]您自己的 S3 存储桶,需要挂载。
到
/FileStore/
,这是唯一可以直接从集群下载的 "directory"。这很有用,例如,用于编写要立即导入 Excel 的 CSV 文件。你写文件,输出一个"Download File"HTMLlink到你的笔记本
有关详细信息,请参阅 Databricks FileSystem Guide。