Vis*_*aji 5 apache-spark apache-spark-sql pyspark
我试图了解是什么导致了阅读速度的巨大差异。我有一个包含 3000 万行和 38 列的数据框。
final_df=spark.read.parquet("/dbfs/FileStore/path/to/file.parquet")
Run Code Online (Sandbox Code Playgroud)
读取该文件需要 14 分钟。
尽管
final_df = spark.read.format("parquet").load("/dbfs/FileStore/path/to/file.parquet")
Run Code Online (Sandbox Code Playgroud)
读取文件仅需2秒。
spark.read.parquet(filename)并spark.read.format("parquet").load(filename)做完全相同的事情。
我们可以在源代码中看到这一点(采用 Spark 3.3.2,本文发布时的最新版本)。
/**
* Loads a Parquet file, returning the result as a `DataFrame`.
*
* Parquet-specific option(s) for reading Parquet files can be found in
* <a href=
* "https://spark.apache.org/docs/latest/sql-data-sources-parquet.html#data-source-option">
* Data Source Option</a> in the version you use.
*
* @since 1.4.0
*/
@scala.annotation.varargs
def parquet(paths: String*): DataFrame = {
format("parquet").load(paths: _*)
}
Run Code Online (Sandbox Code Playgroud)
我们看到,callingspark.read.parquet(filename)实际上是 的一种“别名” spark.read.format("parquet").load(filename)。
这两种读取文件的方法完全相同。此外,使用这些方法读取文件是一种惰性转换,而不是一个操作。只需 2 秒即可读取 3000 万行和 38 列的数据集,这非常快,甚至可能太快了(取决于您的硬件)。
因此,就您的情况而言,可能发生了以下情况之一:
| 归档时间: |
|
| 查看次数: |
2605 次 |
| 最近记录: |