【发布时间】:2019-10-04 17:13:32
【问题描述】:
我在 spark 数据帧上使用缓存时遇到了一些问题。我的期望是,在数据帧上缓存之后,数据帧会在第一次需要时被创建和缓存。对数据帧的任何进一步调用都应该来自缓存
这是我的代码:
val mydf = spark.sql("read about 400 columns from a hive table").
withColumn ("newcol", someudf("existingcol")).
cache()
为了测试,我运行了 mydf.count() 两次。我希望第一次需要一些时间,因为数据正在被缓存。但是第二次应该是瞬时的吧?
我实际看到的是,这两个计数都需要相同的时间。第一个很快就回来了,我认为这告诉我数据没有被缓存。如果我删除代码的 withColumn 部分并只缓存原始数据,第二个计数是瞬时的
我做错了吗?如何从配置单元加载原始数据,添加列,然后缓存数据帧以供进一步使用?使用火花 2.3
任何帮助都会很棒!
【问题讨论】:
-
您能否检查一下explainPlan() 和Spark UI 的存储选项卡,看看数据是否真的被持久化了?
标签: apache-spark apache-spark-sql