辛德蕾拉|SparkSQL /DataFrame /Spark RDD谁快?

如题所示 , SparkSQL /DataFrame /Spark RDD谁快?
按照官方宣传以及大部分人的理解 , SparkSQL和DataFrame虽然基于RDD , 但是由于对RDD做了优化 , 所以性能会优于RDD 。
之前一直也是这么理解和操作的 , 直到最近遇到了一个场景 , 打破了这种不太准确的认识 。
某些场景下 , RDD要比DataFrame快 , 性能有天壤之别 。
需求如下:
以下两份数据求交集 , 结果输出url 。
数据一 , json格式 , 地址我们用path_json表示 , 大小10T , 每一行数据格式:{"id":"md5字符串", "url":"","title":"sysnonyms and antonyms",xxx} , 大概20来个字段;
数据二 , csv格式 , 地址我们用path_csv表示 , 大小50G , 每一行数据格式:name url , 2个字段 , 用\t隔开 。
拿到需求后 , 迅速瞟了一眼数据 , 爽快答应需求方分分钟搞定 。
此时此刻 , 必须得祭出宇宙Top N的IDE , 结合我30多年的人生阅历和代码经验 , 瞬间雷光电闪 , 惊雷骤起 , 一顿操作猛如虎 , 天空飘过以下几行代码:
(老铁们 , 请自行安装python , pyspark , pycharm)
辛德蕾拉|SparkSQL /DataFrame /Spark RDD谁快?方案一
from pyspark.sql import SparkSession【辛德蕾拉|SparkSQL /DataFrame /Spark RDD谁快?】def join_it():path_json = 'hdfs://i/love/you/'# 数据大小10T, 5万分区path_csv= 'hdfs://you/love/me'# 数据大小50Gpath_save = 'hdfs://we/are/together'df1 = spark.read.json(path_json).select('url')df2 = spark.read.option('sep', '\t').schema('name string, url string').csv(path_csv)df1.join(df2) \.select(df1.url)\.coalesce(10000) \.write \.mode('overwrite') \.option('sep', '\t') \.csv(path_save)if __name__ == '__main__':spark = SparkSession.builder.appName('pyspark').getOrCreate()sc = spark.sparkContextsc.setLogLevel("ERROR")#join_it()#spark.stop()spark-submit提交任务到spark集群 , 参数根据自己的实际情况自行修改 。
spark-submit \--master yarn \--deploy-mode client \--name 'i-live-you' \--queue 'you-love-me' \--driver-cores 10 \--driver-memory 30g \--num-executors 3000 \--executor-memory 30g \--executor-cores 4 \--archives 'hdfs://your-python-path-on-hdfs#pkg'--conf spark.yarn.appMasterEnv.PYSPARK_PYTHON='集群里面的python地址' \--conf spark.sql.shuffle.partitions=50000 \--conf spark.default.parallelism=50000 \--conf spark.task.maxFailures=20 \your-spark-script.py如果需要在本机调试代码 , spark的生成需要替换成如下 , 然后直接运行 。 调试通过后 , 仍然需要按照上述方式spark-submit提交任务到集群运行 , 由于数据量很大 , 需要在集群运行才能看出性能差异 。
spark = SparkSession.builder.appName('pyspark').master('local[*]').getOrCreate()又是一顿猛操作 , 提交任务后 , 嗡嗡叫的肚子提醒我 , 要去厕所烧一根香 , 拜拜佛 , 佛祖保佑无bug 。
辛德蕾拉|SparkSQL /DataFrame /Spark RDD谁快?深圳的夏天 , 依旧不负众望的燥热 。 热情似火的太阳 , 伴着她最爱的紫外线和电磁波 , 循着外太空固定的轨道 , 迈着30万公里/秒的矫健步伐 , 到达这颗承载70亿人的蓝色星球 , 穿透层层蓝天白云 , 无私的照亮着广袤的深圳大地 。


推荐阅读