我在 HDFS 上有一个很大的分布式文件,每次我将 sqlContext 与 spark-csv 包一起使用时,它首先加载整个文件,这需要相当长的时间。
df = sqlContext.read.format('com.databricks.spark.csv').options(header='true', inferschema='true').load("file_path")
现在,因为我有时只想做一些快速检查,所以我需要的只是整个文件的几行/任意 n 行。
df_n = sqlContext.read.format('com.databricks.spark.csv').options(header='true', inferschema='true').load("file_path").take(n)
df_n = sqlContext.read.format('com.databricks.spark.csv').options(header='true', inferschema='true').load("file_path").head(n)
但所有这些都在文件加载完成后运行。我不能在读取文件本身时限制行数吗?我指的是在 spark-csv 中 n_rows 相当于 pandas,例如:
pd_df = pandas.read_csv("file_path", nrows=20)
或者可能是 spark 实际上没有加载文件,第一步,但在这种情况下,为什么我的文件加载步骤花费了太多时间呢?
我想要
df.count()
只给我
n
不是所有的行,有可能吗?
最佳答案
您可以使用 limit(n)
.
sqlContext.format('com.databricks.spark.csv') \
.options(header='true', inferschema='true').load("file_path").limit(20)
这将只加载 20 行。
关于apache-spark - 如何使用 spark-csv 包在 HDFS 上仅读取 n 行大型 CSV 文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44277019/