【发布时间】:2019-11-11 02:30:16
【问题描述】:
spark 很懒,对吧?
那么load() 是做什么的呢?
start = timeit.default_timer()
df = sqlContext.read.option(
"es.resource", indexes
).format("org.elasticsearch.spark.sql")
end = timeit.default_timer()
print('without load: ', end - start) # almost instant
start = timeit.default_timer()
df = df.load()
end = timeit.default_timer()
print('load: ', end - start) # takes 1sec
start = timeit.default_timer()
df.show()
end = timeit.default_timer()
print('show: ', end - start) # takes 4 sec
如果show() 是唯一的动作,我猜load 不会像1 秒那样花费太多时间。所以我的结论是load() 是一个动作(而不是火花中的转换)
load 是否真的将整个数据加载到内存中?我不这么认为,但它有什么作用呢?
我已经搜索并查看了文档 https://spark.apache.org/docs/latest/sql-data-sources-load-save-functions.html 但它没有帮助..
【问题讨论】:
-
load 只会给出一个指向数据位置的指针,这将创建一个数据帧。 sparks rdd 模型是惰性的,除非您对 rdd/dataframe/dataset 执行操作,否则它不会将数据完全加载到内存中。如果您了解 sparks rdd lineage,您将了解这一点。
-
好的...如果它是懒惰的,为什么要花整整 1 秒才能到达
load()? -
由于其他一些原因。可能是,但这不是动作。
标签: apache-spark elasticsearch-hadoop