从Spark SQL与RDD api编写数据
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了从Spark SQL与RDD api编写数据相关的知识,希望对你有一定的参考价值。
我最近在EMR 5.19中使用spark 2.3.0在数据集上执行了ETL,其中我包含了一个新的排序列。我使用以下方法做到这一点,并注意到输出比原始数据集(两个压缩拼花)都大得多。
spark.sql("select * from schema.table where column = 'value'").write.bucketBy(1,"column1").sortBy("column2","column3").option("path"m"/mypath").saveAsTable("table")
然后我使用下面的方法重新调整它并获得预期的数据大小(与原始数据相同)。
spark.read.load("/originaldata").filter("column='value'").write.bucketBy(1,"column1").sortBy("column2","column3").option("path"m"/mypath").saveAsTable("table")
我的写方法是相同的,但我提供数据的方式是不同的。但是,为什么第一个结果比第二个结果大4倍?我不是做同样的事情吗?试图查找Spark SQL和RDD之间的差异,但在编写数据时看不到任何具体内容。请注意,原始数据集和2个结果都以相同的方式分区(所有3个中的200个部分)。
在用这些方法得到相同的大于预期的结果之后,我转而改用它
spark.read.load("/originaldata").filter("column='value'").sort("column1","column2").write.save("/location")
这按预期工作,不会失败。也没有使用任何不必要的Hive saveAsTable
功能。比sortBy
更好的选择,这也需要bucketBy
和saveAsTable
以上是关于从Spark SQL与RDD api编写数据的主要内容,如果未能解决你的问题,请参考以下文章