我在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)。
创建数据帧时会浪费时间的原因是什么?
答案 0 :(得分:0)
您比较RDD代码
和Dataset
代码
期望两者花费相同的时间是不现实的。