Spark - 多次使用数据框而没有很多卸载

时间:2018-03-07 20:24:06

标签: scala amazon-web-services apache-spark amazon-redshift

我有疑问。我怎样才能复制数据帧而不再将其卸载到redshift?

val companiesData = spark.read.format("com.databricks.spark.redshift")
.option("url","jdbc:redshift://xxxx:5439/cf?user="+user+"&password="+password)
.option("query","select * from cf_core.company")
//.option("dbtable",schema+"."+table)
.option("aws_iam_role","arn:aws:iam::xxxxxx:role/somerole")
.option("tempdir","s3a://xxxxx/Spark")
.load()

import class.companiesData
class test {
val secondDF = filteredDF(companiesData)

 def filteredDF(df: Dataframe): Dataframe {
   val result = df.select("companynumber")
  result
 }
}

在这种情况下,这将两次卸载数据。首先从表中选择*,然后通过仅选择companynumber来卸载它。我如何卸载一次数据并多次操作?这对我来说是个严重的问题。谢谢你的帮助

1 个答案:

答案 0 :(得分:1)

通过“卸载”,您的意思是读取数据吗?如果是这样,为什么你确定它被读了两次?实际上,您的代码中没有任何操作,因此我甚至不确定是否正在读取数据。如果您尝试在代码中的其他位置访问secondDF,spark 应该只读取您在类“test”中选择的列。我不是百分之百确定这一点,因为我之前从未使用过红移来将数据加载到spark中。

通常,如果要重用数据帧,则应使用

进行缓存
companiesData.cache()

然后,无论何时在数据帧上调用操作,都会将其缓存到内存中。