创建RDD Vs花费的时间。 HDFS文件中的数据框

时间:2018-11-01 11:44:46

标签: apache-spark dataframe pyspark apache-spark-sql rdd

我在HDFS上有一个具有以下块大小配置的文件。

Status: HEALTHY  Total size:    1172387607850 B  Total dirs:    0  Total files:   1  Total symlinks:                0  Total blocks (validated):      8735 (avg. block size 134217241 B)  Minimally replicated blocks:   8735 (100.0 %)  Over-replicated blocks:        0 (0.0 %)  Under-replicated blocks:       0 (0.0 %)  Mis-replicated blocks:         0 (0.0 %)  Default replication factor:    3  Average block replication:     3.0  Corrupt blocks:                0  Missing replicas:              0 (0.0 %)  Number of data-nodes:          16  Number of racks:               1 FSCK ended at Tue Oct 30 02:30:04 EDT 2018 in 75 milliseconds  

我尝试通过给定文件通过简单命令创建RDD

rdd1 = sqlContext.textFile("File HDFS path")  
rdd1.take(50)

此命令以毫秒为单位

然后我尝试使用相同的文件创建Dataframe。由于创建的任务数为8735(文件中没有块),因此花费了很多时间。

data_df = spark.read.format("com.databricks.spark.csv") \
  .option("header", "false") \
  .option("inferschema", "true") \
  .option("delimiter", "|").load(HDFS_FILE_PATH)

数据帧和RDD中的分区数相同(8735)。
创建数据帧时会浪费时间的原因是什么?

1 个答案:

答案 0 :(得分:0)

您比较RDD代码

  • 不进行模式推断,
  • 除了查找新行外,没有任何解析
  • 并且仅读取前50行(最多可能读取一个分区)。

Dataset代码

  • 必须解析所有记录(读取文件的所有行)
  • 并推断模式。

期望两者花费相同的时间是不现实的。