Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/6.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
Apache spark spark:dataframe.count产生的行比逐行打印或show()多得多_Apache Spark_Apache Spark Sql_Spark Dataframe_Databricks - Fatal编程技术网

Apache spark spark:dataframe.count产生的行比逐行打印或show()多得多

Apache spark spark:dataframe.count产生的行比逐行打印或show()多得多,apache-spark,apache-spark-sql,spark-dataframe,databricks,Apache Spark,Apache Spark Sql,Spark Dataframe,Databricks,新的火花;使用数据记录器。真的很困惑 我有这个数据帧:df df.count() 但如果我逐行打印: df.collect.foreach(println)我只打印出541行。类似地,df.show(5460)仅显示1017行。原因可能是什么 一个相关的问题:如何使用Databricks保存“df”?它保存到哪里去了?--我以前试图保存,但后来找不到该文件。如果相关的话,我通过安装S3存储桶来加载数据 差异可能是错误的源数据。Spark天生就是懒惰的,所以它不会构建一堆列并填充它们来计算行数。因

新的火花;使用数据记录器。真的很困惑

我有这个数据帧:df

df.count()

但如果我逐行打印:
df.collect.foreach(println)
我只打印出541行。类似地,
df.show(5460)
仅显示1017行。原因可能是什么


一个相关的问题:如何使用Databricks保存“df”?它保存到哪里去了?--我以前试图保存,但后来找不到该文件。如果相关的话,我通过安装S3存储桶来加载数据

差异可能是错误的源数据。Spark天生就是懒惰的,所以它不会构建一堆列并填充它们来计算行数。因此,当您实际对数据或行或null执行时,数据可能无法解析。或者,您的模式不允许某些列为null,并且在完全解析数据时它们为null。或者您正在修改计数、采集和显示之间的数据。只是没有足够的细节来确定。您可以打开一个spark外壳,创建一小段数据,并通过将该数据转换为数据帧来测试这些条件。将架构更改为允许和不允许空值,或在源数据中添加空值而不是空值。使源数据为字符串,但使架构需要整数

至于保存数据帧。使用write创建数据帧编写器,然后定义要将其保存为的文件类型,然后定义文件名。此示例保存拼花地板文件。这里还允许使用许多其他文件类型和写入选项

df.write.parquet("s3://myfile")

关于第一个问题,默认情况下,Databricks输出会截断。这既适用于单元格中的文本输出,也适用于
display()
的输出。我相信
.count()

关于第二个问题,您可以在Databrick上保存四种类型的位置:

  • 使用
    df.write.saveAsTable()
    配置单元管理的表。这些数据最终将存储在由Databricks管理的S3存储桶中,该存储桶将安装到
    /user/hive/warehouse
    。请注意,您将无权访问AWS凭据以使用该存储桶。但是,如果需要,您可以使用Databricks文件实用程序(
    dbutils.fs.*
    )或Hadoop文件系统API来处理这些文件

  • 本地SSD存储。这最好使用
    persist()
    cache()
    来完成,但是,如果确实需要,您可以使用
    df.write.save(“/dbfs/tmp/…”)
    写入,例如
    /tmp

  • 您需要安装自己的S3存储桶

  • /FileStore/
    ,这是您可以直接从集群下载的唯一“目录”。例如,这对于编写要立即放入Excel的CSV文件非常有用。您编写文件并将“下载文件”HTML链接输出到笔记本中


  • 有关更多详细信息,请参阅。

    谢谢标记。我认为你对我的第二个问题的回答是正确的。关于第一个问题,我还是不确定。在计数和println/show之间没有其他操作。数据看起来很好——它打印OK(如果缺少一些行)并保存OK。保存的数据实际上有5460行。此外,鉴于行数根据我是请求foreach println还是show而有所不同,我怀疑这与DataRicks的某些缺陷有关,特别是输出单元格的大小。