2017-09-02 128 views
1

我是新来斯卡拉/火花(大约一个星期现在)斯卡拉/星火选择列很慢

下面的代码被我的8核心的笔记本电脑,64位,Win10 运行数据帧有1700行。 ONE选择需要十秒以上。

看着控制台显示主要挂在这一点上:

17/09/02 12时23分46秒INFO FileSourceStrategy:修剪目录有:

守则

{ 

    val major:String =name.substring(0,name.indexOf("_SCORE"))+"_idx1" 
    println(major) 
    val majors = dfMergedDroppedDeleted 
     .select(col(major)) 
     .collect().toSeq 
    println(s"got majors ${majors.size}") 
} 

这应该需要几毫秒(基于休眠,r,mysql等的经验) 我假设我的火花配置有问题吗?

任何建议将是最受欢迎的。

全控制台输出到挂起如下:

1637_1636_1716_idx1

1637_1636_1716_idx2

17/09/02 12时23分08秒INFO ContextCleaner:已清除累加器765

17/09/02 12:23:08 INFO ContextCleaner:清理累加器763

17/09/02 12时23分08秒INFO BlockManagerInfo:在存储器上删除了192.168.0.13:62246 broadcast_51_piece0(尺寸:113.7 KB,免费:901.6 MB)

17/09/02 12点23: 08 INFO ContextCleaner:已清除累加器761

17/09/02 12时23分08秒INFO ContextCleaner:已清除累加器764

17/09/02 12时23分08秒INFO ContextCleaner:已清除累加器762

17/09/02 12:23:08 INFO ContextCleaner:清理累加器766

17/09/02 12时23分08秒INFO BlockManagerInfo:在存储器上删除了192.168.0.13:62246 broadcast_50_piece0(尺寸:20.7 KB,免费:901.6 MB)

17/09/02 12点23: 08信息FileSourceStrategy:修剪目录:

+0

星火快得多没有内置用于同样用途的,如MySQL数据库。你在哪里运行?在火花外壳或提交?多少个文件和多少个分区?你在这之前运行什么代码? – Garren

+0

我目前正在运行作为junit测试。从csv导入一个数据文件。在此之前,已经有多个数据帧转换,其中的列与withColumn()合并在一起。这是很多代码,我不相信这个问题是相关的,因为我现在有一个大约1000个变量和1700行的单个数据框 – Jake

+0

注意:这是数据清理操作的一部分。我通常在R. – Jake

回答

1

将数据帧放入缓存中会产生很大的差异。

val dfMergedDroppedDeletedCached:DataFrame=dfMergedDroppedDeleted.cache() 

然而,缓存过程本身很慢,所以这只是不负有心人,如果你正在执行多个操作

UPDATE 信用拉梅什Maharjan到谁在评论中写道:

耗时的部分没有选择。 select是自然分布的,并且会在执行者的每个本地数据中执行。耗时的部分是收集。 Collect功能收集驱动程序节点中的所有数据。这需要很多时间。这就是为什么收集总是建议不要使用,如果有必要使用它的最低限度。

我已经改变了查询,如下:

  val majorstr:String = dfMergedDroppedDeletedCached.filter(dfMergedDroppedDeletedCached(major).isNotNull) 
      .select(col(major)) 
      .limit(1) 
      .first().getString(0) 

不完全是甲骨文速度,但不是使用收集

+0

伟大:)并感谢信用 –

+0

你也值得代表。如果你想以你的名义重新发布答案,我会很乐意删除我的。我不想“窃取”代表,只是想确定答案在那里,因为这在以前没有在互联网上讨论过,根据我的知识 – Jake

+1

让答案保持原样。你写完了。 :) –