我对scala还是新手(现在大约一周了)
下面的代码是运行在我的8核心笔记本电脑,64位,Win10数据rows有1700行。一个选择需要超过10秒。
观看控制台显示的主要挂起情况如下:
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}")
}这需要几毫秒(根据hibernate、r、mysql等方面的经验),我假设我的星火配置有问题吗?
任何建议都将受到欢迎。
挂起前的完整控制台输出如下:
1637_1636_1716_idx1 1637_1636_1716_idx2 17/09/02 12:23:08信息ContextCleaner:清洁累加器765 17/09/02 12:23:08信息ContextCleaner:清洁蓄电池763 17/09/02 12:23:08信息BlockManagerInfo:删除broadcast_51_piece0在192.168.0.13:62246内存(大小: 113.7 KB,空闲: 901.6 MB) 17/09/02 12:23:08信息ContextCleaner:清洁蓄电池761 17/09/02 12:23:08信息ContextCleaner:清洁累加器764 17/09/02 12:23:08信息ContextCleaner:清洁蓄电池762 17/09/02 12:23:08信息ContextCleaner:清洁累加器766 17/09/02 12:23:08信息BlockManagerInfo:删除broadcast_50_piece0在192.168.0.13:62246内存(大小:20.7KB,空闲: 901.6 MB) 17/09/02 12:23:08 INFO FileSourceStrategy:
发布于 2017-09-02 20:45:21
将数据存储在缓存中会产生很大的不同。
val dfMergedDroppedDeletedCached:DataFrame=dfMergedDroppedDeleted.cache()但是,缓存过程本身是缓慢的,因此只有当您执行多个操作时,这才会有回报。
UPDATE Credit Maharjan在一篇评论中写道:
不选择耗时部分。select在本质上是分布式的,将在执行器中的每个本地数据中执行。时间消耗部分是收集。收集功能收集驱动节点中的所有数据。这需要很长时间。这就是为什么收集总是被建议不要使用,如果必要的话,使用它的最低限度。
我已将查询更改如下:
val majorstr:String = dfMergedDroppedDeletedCached.filter(dfMergedDroppedDeletedCached(major).isNotNull)
.select(col(major))
.limit(1)
.first().getString(0)不完全是Oracle的速度,但比使用collect快得多
https://stackoverflow.com/questions/46017721
复制相似问题