Spark中RDD和DataFrame、DataSet的区别?---面试题

备注:此博客为转载,原作者地址请点击此处

RDD、DataFrame和DataSet的区别

    <!-- 作者区域 -->
    <div class="author">
      <a class="avatar" href="/u/92a1227beb27">
        <img src="//upload.jianshu.io/users/upload_avatars/1212395/372f1407ba8d.jpg?imageMogr2/auto-orient/strip|imageView2/1/w/96/h/96" alt="96">


jacksu在简书





2016.02.04 10:33*
字数 1613
阅读 33898 评论 14



    <!-- 文章内容 -->
    <div data-note-content="" class="show-content">
      <div class="show-content-free">
        <p><strong>spark 2.X开始,三者的关系发生了变化,可以参考<a href="http://www.infoq.com/cn/articles/three-apache-spark-apis-rdds-dataframes-and-datasets" target="_blank" rel="nofollow">《且谈Apache Spark的API三剑客:RDD、DataFrame和Dataset》</a> ,在2.X中DataFrame=DataSet[Row],其实是不知道类型。下面介绍是1.X,以免误导大家。</strong></p>

RDD、DataFrame和DataSet是容易产生混淆的概念,必须对其相互之间对比,才可以知道其中异同。

RDD和DataFrame

RDD-DataFrame

上图直观地体现了DataFrame和RDD的区别。左侧的RDD[Person]虽然以Person为类型参数,但Spark框架本身不了解Person类的内部结构。而右侧的DataFrame却提供了详细的结构信息,使得Spark SQL可以清楚地知道该数据集中包含哪些列,每列的名称和类型各是什么。DataFrame多了数据的结构信息,即schema。RDD是分布式的Java对象的集合。DataFrame是分布式的Row对象的集合。DataFrame除了提供了比RDD更丰富的算子以外,更重要的特点是提升执行效率、减少数据读取以及执行计划的优化,比如filter下推、裁剪等。

提升执行效率

RDD API是函数式的,强调不变性,在大部分场景下倾向于创建新对象而不是修改老对象。这一特点虽然带来了干净整洁的API,却也使得Spark应用程序在运行期倾向于创建大量临时对象,对GC造成压力。在现有RDD API的基础之上,我们固然可以利用mapPartitions方法来重载RDD单个分片内的数据创建方式,用复用可变对象的方式来减小对象分配和GC的开销,但这牺牲了代码的可读性,而且要求开发者对Spark运行时机制有一定的了解,门槛较高。另一方面,Spark SQL在框架内部已经在各种可能的情况下尽量重用对象,这样做虽然在内部会打破了不变性,但在将数据返回给用户时,还会重新转为不可变数据。利用 DataFrame API进行开发,可以免费地享受到这些优化效果。

减少数据读取

分析大数据,最快的方法就是 ——忽略它。这里的“忽略”并不是熟视无睹,而是根据查询条件进行恰当的剪枝。

上文讨论分区表时提到的分区剪 枝便是其中一种——当查询的过滤条件中涉及到分区列时,我们可以根据查询条件剪掉肯定不包含目标数据的分区目录,从而减少IO。

对于一些“智能”数据格 式,Spark SQL还可以根据数据文件中附带的统计信息来进行剪枝。简单来说,在这类数据格式中,数据是分段保存的,每段数据都带有最大值、最小值、null值数量等 一些基本的统计信息。当统计信息表名某一数据段肯定不包括符合查询条件的目标数据时,该数据段就可以直接跳过(例如某整数列a某段的最大值为100,而查询条件要求a > 200)。

此外,Spark SQL也可以充分利用RCFile、ORC、Parquet等列式存储格式的优势,仅扫描查询真正涉及的列,忽略其余列的数据。

执行优化

人口数据分析示例

为了说明查询优化,我们来看上图展示的人口数据分析的示例。图中构造了两个DataFrame,将它们join之后又做了一次filter操作。如果原封不动地执行这个执行计划,最终的执行效率是不高的。因为join是一个代价较大的操作,也可能会产生一个较大的数据集。如果我们能将filter下推到 join下方,先对DataFrame进行过滤,再join过滤后的较小的结果集,便可以有效缩短执行时间。而Spark SQL的查询优化器正是这样做的。简而言之,逻辑查询计划优化就是一个利用基于关系代数的等价变换,将高成本的操作替换为低成本操作的过程。

得到的优化执行计划在转换成物 理执行计划的过程中,还可以根据具体的数据源的特性将过滤条件下推至数据源内。最右侧的物理执行计划中Filter之所以消失不见,就是因为溶入了用于执行最终的读取操作的表扫描节点内。

对于普通开发者而言,查询优化 器的意义在于,即便是经验并不丰富的程序员写出的次优的查询,也可以被尽量转换为高效的形式予以执行。

RDD和DataSet

  • DataSet以Catalyst逻辑执行计划表示,并且数据以编码的二进制形式被存储,不需要反序列化就可以执行sorting、shuffle等操作。

  • DataSet创立需要一个显式的Encoder,把对象序列化为二进制,可以把对象的scheme映射为Spark
    SQl类型,然而RDD依赖于运行时反射机制。

通过上面两点,DataSet的性能比RDD的要好很多,可以参见[3]

DataFrame和DataSet

Dataset可以认为是DataFrame的一个特例,主要区别是Dataset每一个record存储的是一个强类型值而不是一个Row。因此具有如下三个特点:

  • DataSet可以在编译时检查类型

  • 并且是面向对象的编程接口。用wordcount举例:

//DataFrame

// Load a text file and interpret each line as a java.lang.String
val ds = sqlContext.read.text("/home/spark/1.6/lines").as[String]
val result = ds
.flatMap(.split(" ")) // Split on whitespace
.filter(
!= “”) // Filter empty words
.toDF() // Convert to DataFrame to perform aggregation / sorting
.groupBy( &lt; s p a n c l a s s = &quot; h l j s s t r i n g &quot; &gt; &quot; v a l u e &quot; &lt; / s p a n &gt; ) &lt; s p a n c l a s s = &quot; h l j s c o m m e n t &quot; &gt; / / C o u n t n u m b e r o f o c c u r e n c e s o f e a c h w o r d &lt; / s p a n &gt; . a g g ( c o u n t ( &lt; s p a n c l a s s = &quot; h l j s s t r i n g &quot; &gt; &quot; &quot; &lt; / s p a n &gt; ) a s &lt; s p a n c l a s s = &quot; h l j s s t r i n g &quot; &gt; &quot; n u m O c c u r a n c e s &quot; &lt; / s p a n &gt; ) . o r d e r B y ( &lt;span class=&quot;hljs-string&quot;&gt;&quot;value&quot;&lt;/span&gt;) &lt;span class=&quot;hljs-comment&quot;&gt;// Count number of occurences of each word&lt;/span&gt; .agg(count(&lt;span class=&quot;hljs-string&quot;&gt;&quot;*&quot;&lt;/span&gt;) as &lt;span class=&quot;hljs-string&quot;&gt;&quot;numOccurances&quot;&lt;/span&gt;) .orderBy( “numOccurances” desc) // Show most common words first

//DataSet,完全使用scala编程,不要切换到DataFrame

val wordCount = 
  ds.flatMap(_.split(" "))
    .filter(_ != "")
    .groupBy(_.toLowerCase()) // Instead of grouping on a column expression (i.e. $"value") we pass a lambda function
    .count()
  • 后面版本DataFrame会继承DataSet,DataFrame是面向Spark SQL的接口。

DataFrame和DataSet可以相互转化,df.as[ElementType]这样可以把DataFrame转化为DataSet,ds.toDF()这样可以把DataSet转化为DataFrame。

参考

[1] Spark SQL结构化分析

[2] 解读2015之Spark篇:新生态系统的形成

[3] Introducing Spark Datasets

[4] databricks example

      </div>
    </div>
</div>

<!-- 如果是付费文章,未购买,则显示购买按钮 -->

<!-- 连载目录项 -->

<!-- 如果是付费文章 -->
  <!-- 如果是付费连载,已购买,且作者允许赞赏,则显示付费信息和赞赏 -->
    <div id="free-reward-panel" class="support-author"><p>小礼物走一走,来简书关注我</p> <div class="btn btn-pay">赞赏支持</div> <div class="supporter"><ul class="support-list"></ul> <!----></div> <!----> <!----></div>

  <div class="show-foot">
    <a class="notebook" href="/nb/3044371">
      <i class="iconfont ic-search-notebook"></i>
      <span>spark</span>



  <!-- 文章底部作者信息 -->
    <div class="follow-detail">
      <div class="info">
        <a class="avatar" href="/u/92a1227beb27">
          <img src="//upload.jianshu.io/users/upload_avatars/1212395/372f1407ba8d.jpg?imageMogr2/auto-orient/strip|imageView2/1/w/96/h/96" alt="96">


jacksu在简书

写了 65379 字,被 1325 人关注,获得了 591 个喜欢


Talk is cheap, show me the code!

分布式框架、大数据、机器学习

github: https://github.com/jacksu

<div class="meta-bottom">
  <div data-v-6ddd02c6="" class="like"><div data-v-6ddd02c6="" class="btn like-group"><div data-v-6ddd02c6="" class="btn-like"><a data-v-6ddd02c6="">喜欢</a></div> <div data-v-6ddd02c6="" class="modal-wrap"><a data-v-6ddd02c6="">46</a></div></div> <!----></div>
  <div class="share-group">
    <a class="share-circle" data-action="weixin-share" data-toggle="tooltip" data-original-title="分享到微信">
      <i class="iconfont ic-wechat"></i>
    </a>
    <a class="share-circle" data-action="weibo-share" data-toggle="tooltip" href="javascript:void((function(s,d,e,r,l,p,t,z,c){var%20f='http://v.t.sina.com.cn/share/share.php?appkey=1881139527',u=z||d.location,p=['&amp;url=',e(u),'&amp;title=',e(t||d.title),'&amp;source=',e(r),'&amp;sourceUrl=',e(l),'&amp;content=',c||'gb2312','&amp;pic=',e(p||'')].join('');function%20a(){if(!window.open([f,p].join(''),'mb',['toolbar=0,status=0,resizable=1,width=440,height=430,left=',(s.width-440)/2,',top=',(s.height-430)/2].join('')))u.href=[f,p].join('');};if(/Firefox/.test(navigator.userAgent))setTimeout(a,0);else%20a();})(screen,document,encodeURIComponent,'','','', '推荐 @jacksu_ 的文章《RDD、DataFrame和DataSet的区别》( 分享自 @简书 )','https://www.jianshu.com/p/c0181667daa0?utm_campaign=maleskine&amp;utm_content=note&amp;utm_medium=reader_share&amp;utm_source=weibo','页面编码gb2312|utf-8默认gb2312'));" data-original-title="分享到微博">
      <i class="iconfont ic-weibo"></i>
    </a>
    <a class="share-circle" data-toggle="tooltip" id="longshare" target="_blank" data-original-title="" title="">
        <div class="qrcode" id="qrcode">
         <img src="//cdn2.jianshu.io/assets/web/download-index-side-qrcode-cb13fc9106a478795f8d10f9f632fccf.png" alt="Download index side qrcode">
         <p>下载app生成长微博图片</p>
         </div>
      <i class="iconfont ic-picture"></i>
    </a>
    <a class="share-circle more-share" tabindex="0" data-toggle="popover" data-placement="top" data-html="true" data-trigger="focus" href="javascript:void(0);" data-content="
      <ul class=&quot;share-list&quot;>
        <li><a href=&quot;javascript:void(function(){var d=document,e=encodeURIComponent,r='http://sns.qzone.qq.com/cgi-bin/qzshare/cgi_qzshare_onekey?url='+e('https://www.jianshu.com/p/c0181667daa0?utm_campaign=maleskine&amp;utm_content=note&amp;utm_medium=reader_share&amp;utm_source=qzone')+'&amp;title='+e('推荐 jacksu在简书 的文章《RDD、DataFrame和DataSet的区别》'),x=function(){if(!window.open(r,'qzone','toolbar=0,resizable=1,scrollbars=yes,status=1,width=600,height=600'))location.href=r};if(/Firefox/.test(navigator.userAgent)){setTimeout(x,0)}else{x()}})();&quot;><i class=&quot;social-icon-sprite social-icon-zone&quot;></i><span>分享到QQ空间</span></a></li>
        <li><a href=&quot;javascript:void(function(){var d=document,e=encodeURIComponent,r='https://twitter.com/share?url='+e('https://www.jianshu.com/p/c0181667daa0?utm_campaign=maleskine&amp;utm_content=note&amp;utm_medium=reader_share&amp;utm_source=twitter')+'&amp;text='+e('推荐 jacksu在简书 的文章《RDD、DataFrame和DataSet的区别》( 分享自 @jianshucom )')+'&amp;related='+e('jianshucom'),x=function(){if(!window.open(r,'twitter','toolbar=0,resizable=1,scrollbars=yes,status=1,width=600,height=600'))location.href=r};if(/Firefox/.test(navigator.userAgent)){setTimeout(x,0)}else{x()}})();&quot;><i class=&quot;social-icon-sprite social-icon-twitter&quot;></i><span>分享到Twitter</span></a></li>
        <li><a href=&quot;javascript:void(function(){var d=document,e=encodeURIComponent,r='https://www.facebook.com/dialog/share?app_id=483126645039390&amp;display=popup&amp;href=https://www.jianshu.com/p/c0181667daa0?utm_campaign=maleskine&amp;utm_content=note&amp;utm_medium=reader_share&amp;utm_source=facebook',x=function(){if(!window.open(r,'facebook','toolbar=0,resizable=1,scrollbars=yes,status=1,width=450,height=330'))location.href=r};if(/Firefox/.test(navigator.userAgent)){setTimeout(x,0)}else{x()}})();&quot;><i class=&quot;social-icon-sprite social-icon-facebook&quot;></i><span>分享到Facebook</span></a></li>
        <li><a href=&quot;javascript:void(function(){var d=document,e=encodeURIComponent,r='https://plus.google.com/share?url='+e('https://www.jianshu.com/p/c0181667daa0?utm_campaign=maleskine&amp;utm_content=note&amp;utm_medium=reader_share&amp;utm_source=google_plus'),x=function(){if(!window.open(r,'google_plus','toolbar=0,resizable=1,scrollbars=yes,status=1,width=450,height=330'))location.href=r};if(/Firefox/.test(navigator.userAgent)){setTimeout(x,0)}else{x()}})();&quot;><i class=&quot;social-icon-sprite social-icon-google&quot;></i><span>分享到Google+</span></a></li>
        <li><a href=&quot;javascript:void(function(){var d=document,e=encodeURIComponent,s1=window.getSelection,s2=d.getSelection,s3=d.selection,s=s1?s1():s2?s2():s3?s3.createRange().text:'',r='http://www.douban.com/recommend/?url='+e('https://www.jianshu.com/p/c0181667daa0?utm_campaign=maleskine&amp;utm_content=note&amp;utm_medium=reader_share&amp;utm_source=douban')+'&amp;title='+e('RDD、DataFrame和DataSet的区别')+'&amp;sel='+e(s)+'&amp;v=1',x=function(){if(!window.open(r,'douban','toolbar=0,resizable=1,scrollbars=yes,status=1,width=450,height=330'))location.href=r+'&amp;r=1'};if(/Firefox/.test(navigator.userAgent)){setTimeout(x,0)}else{x()}})()&quot;><i class=&quot;social-icon-sprite social-icon-douban&quot;></i><span>分享到豆瓣</span></a></li>
      </ul>
    " data-original-title="" title="">更多分享</a>
  </div>
</div>
  <a id="web-note-ad-1" target="_blank" href="/apps/redirect?utm_source=note-bottom-click"><img src="//cdn2.jianshu.io/assets/web/web-note-ad-1-c2e1746859dbf03abe49248893c9bea4.png" alt="Web note ad 1"></a>
<!--
<div id="note-comment-above-ad-container">
  <span id="youdao-comment-ad" class="ad-badge">广告</span>
</div>
-->
<div><div id="comment-list" class="comment-list"><div><form class="new-comment"><a class="avatar"><img src="//cdn2.jianshu.io/assets/default_avatar/avatar_default-78d4d1f68984cd6d4379508dd94b4210.png"></a> <div class="sign-container"><a href="/sign_in?utm_source=desktop&amp;utm_medium=not-signed-in-comment-form" class="btn btn-sign">登录</a> <span>后发表评论</span></div></form> <!----></div> <!----> <div class="comments-placeholder" style="display: none;"><div class="author"><div class="avatar"></div> <div class="info"><div class="name"></div> <div class="meta"></div></div></div> <div class="text"></div> <div class="text animation-delay"></div> <div class="tool-group"><i class="iconfont ic-zan-active"></i><div class="zan"></div> <i class="iconfont ic-list-comments"></i><div class="zan"></div></div></div> <div id="normal-comment-list" class="normal-comment-list"><div><div><div class="top-title"><span>14条评论</span> <a class="author-only">只看作者</a> <a class="close-btn" style="display: none;">关闭评论</a> <div class="pull-right"><a class="active">按时间倒序</a><a class="">按时间正序</a></div></div></div> <!----> <!----> <div class="comments-placeholder" style="display: none;"><div class="author"><div class="avatar"></div> <div class="info"><div class="name"></div> <div class="meta"></div></div></div> <div class="text"></div> <div class="text animation-delay"></div> <div class="tool-group"><i class="iconfont ic-zan-active"></i><div class="zan"></div> <i class="iconfont ic-list-comments"></i><div class="zan"></div></div></div> <div id="comment-30623259" class="comment"><div><div class="author"><div data-v-f3bf5228="" class="v-tooltip-container" style="z-index: 0;"><div class="v-tooltip-content"><a href="/u/327b42343412" target="_blank" class="avatar"><img src="//upload.jianshu.io/users/upload_avatars/9217271/d634d19d-61b3-4d83-9e7b-0251e25e4f63?imageMogr2/auto-orient/strip|imageView2/1/w/114/h/114/format/webp"></a>  </div> <!----></div> <div class="info"><a href="/u/327b42343412" target="_blank" class="name">Northern_9f84</a> <!----> <!----> <div class="meta"><span>7楼 · 2018.11.13 14:20</span></div></div></div> <div class="comment-wrap"><p>mark,感谢</p> <div class="tool-group"><a data-v-cdecbe24="" id="like-button-30623259" class="like-button"><span data-v-cdecbe24="">赞</span></a> <a class=""><i class="iconfont ic-comment"></i> <span>回复</span></a> <!----> <!----></div></div></div> <div class="sub-comment-list hide"><!----> <!----></div></div><div id="comment-19767371" class="comment"><div><div class="author"><div data-v-f3bf5228="" class="v-tooltip-container" style="z-index: 0;"><div class="v-tooltip-content"><a href="/u/f3e8c58ae25d" target="_blank" class="avatar"><img src="//upload.jianshu.io/users/upload_avatars/1778843/3c51d48b53b9?imageMogr2/auto-orient/strip|imageView2/1/w/114/h/114/format/webp"></a>  </div> <!----></div> <div class="info"><a href="/u/f3e8c58ae25d" target="_blank" class="name">下班儿去看书</a> <!----> <!----> <div class="meta"><span>6楼 · 2018.01.20 12:21</span></div></div></div> <div class="comment-wrap"><p>反复看了几遍,写的很好</p> <div class="tool-group"><a data-v-cdecbe24="" id="like-button-19767371" class="like-button"><span data-v-cdecbe24="">赞</span></a> <a class=""><i class="iconfont ic-comment"></i> <span>回复</span></a> <!----> <!----></div></div></div> <div class="sub-comment-list"><div id="comment-19929575" class="sub-comment"><p><div data-v-f3bf5228="" class="v-tooltip-container" style="z-index: 0;"><div class="v-tooltip-content"><a href="/u/92a1227beb27" target="_blank">jacksu在简书</a>:
        </div> <!----></div> <span><a href="/users/f3e8c58ae25d" class="maleskine-author" target="_blank" data-user-slug="f3e8c58ae25d">@下班儿去看书</a> 欢迎交流</span></p> <div class="sub-tool-group"><span>2018.01.25 00:38</span> <a class=""><i class="iconfont ic-comment"></i> <span>回复</span></a> <!----> <!----></div></div> <div class="sub-comment more-comment"><a class="add-comment-btn"><i class="iconfont ic-subcomment"></i> <span>添加新评论</span></a> <!----> <!----> <!----></div> <!----></div></div><div id="comment-6068097" class="comment"><div><div class="author"><div data-v-f3bf5228="" class="v-tooltip-container" style="z-index: 0;"><div class="v-tooltip-content"><a href="/u/c87b4f370446" target="_blank" class="avatar"><img src="//upload.jianshu.io/users/upload_avatars/3673675/2d1fcc1b-1b60-46e0-b2a8-8820de8f0cd4.jpg?imageMogr2/auto-orient/strip|imageView2/1/w/114/h/114/format/webp"></a>  </div> <!----></div> <div class="info"><a href="/u/c87b4f370446" target="_blank" class="name">Fang2016</a> <!----> <!----> <div class="meta"><span>5楼 · 2016.11.30 21:28</span></div></div></div> <div class="comment-wrap"><p>我有个疑问:<br>官网原文<br>A DataFrame is a Dataset organized into named columns. It is conceptually equivalent to a table in a relational database or a data frame in R/Python, but with richer optimizations under the hood. DataFrames can be constructed from a wide array of sources such as: structured data files, tables in Hive, external databases, or existing RDDs. The DataFrame API is available in Scala, Java, Python, and R. In Scala and Java, a DataFrame is represented by a Dataset of Rows. In the Scala API, DataFrame is simply a type alias of Dataset[Row]. While, in Java API, users need to use Dataset&lt;Row&gt; to represent a DataFrame.<br>其中两句:<br>DataFrame is represented by a Dataset of Rows<br>A DataFrame is a Dataset organized into named columns<br>意思是不是DataFrame是DataSet的子集,而不是DataSet是DataFrame的特例?</p> <div class="tool-group"><a data-v-cdecbe24="" id="like-button-6068097" class="like-button"><span data-v-cdecbe24="">1人赞</span></a> <a class=""><i class="iconfont ic-comment"></i> <span>回复</span></a> <!----> <!----></div></div></div> <div class="sub-comment-list"><div id="comment-7848599" class="sub-comment"><p><div data-v-f3bf5228="" class="v-tooltip-container" style="z-index: 0;"><div class="v-tooltip-content"><a href="/u/e5b6e8325ff5" target="_blank">我真的真的很帅</a>:
        </div> <!----></div> <span> <a href="/users/c87b4f370446" class="maleskine-author" target="_blank" data-user-slug="c87b4f370446">@Fang2016</a> 赞同你的理解</span></p> <div class="sub-tool-group"><span>2017.02.09 14:32</span> <a class=""><i class="iconfont ic-comment"></i> <span>回复</span></a> <!----> <!----></div></div> <div class="sub-comment more-comment"><a class="add-comment-btn"><i class="iconfont ic-subcomment"></i> <span>添加新评论</span></a> <!----> <!----> <!----></div> <!----></div></div><div id="comment-2890626" class="comment"><div><div class="author"><div data-v-f3bf5228="" class="v-tooltip-container" style="z-index: 0;"><div class="v-tooltip-content"><a href="/u/1da1341ba178" target="_blank" class="avatar"><img src="//upload.jianshu.io/users/upload_avatars/1252690/c22435153adb?imageMogr2/auto-orient/strip|imageView2/1/w/114/h/114/format/webp"></a>  </div> <!----></div> <div class="info"><a href="/u/1da1341ba178" target="_blank" class="name">蝶影追梦</a> <!----> <!----> <div class="meta"><span>4楼 · 2016.06.26 09:57</span></div></div></div> <div class="comment-wrap"><p>您好,你提到,DataSet创立需要一个显式的Encoder。<br>这点不对吧,官网说到:encoders are code generated dynamically。</p> <div class="tool-group"><a data-v-cdecbe24="" id="like-button-2890626" class="like-button"><span data-v-cdecbe24="">赞</span></a> <a class=""><i class="iconfont ic-comment"></i> <span>回复</span></a> <!----> <!----></div></div></div> <div class="sub-comment-list hide"><!----> <!----></div></div><div id="comment-2315532" class="comment"><div><div class="author"><div data-v-f3bf5228="" class="v-tooltip-container" style="z-index: 0;"><div class="v-tooltip-content"><a href="/u/7bdccac1f8dd" target="_blank" class="avatar"><img src="//cdn2.jianshu.io/assets/default_avatar/11-4d7c6ca89f439111aff57b23be1c73ba.jpg"></a>  </div> <!----></div> <div class="info"><a href="/u/7bdccac1f8dd" target="_blank" class="name">mr_ly</a> <!----> <!----> <div class="meta"><span>3楼 · 2016.05.09 23:42</span></div></div></div> <div class="comment-wrap"><p>大神  请教一个问题啊  我用 dataframe读取了一个大概有200W行 2G的hive table 并与几个hive table 进行一系列join操作 最后 insert 到一张新hive里面  spark就跑不出来了   减少表的行数到 1W行 能够出结果  我想问问spark对机器的内存配置要求很高吗?  我的机器是在一台服务器上虚拟出来的 5台机器  每台机器 内存6G  这样配置还不行么?</p> <div class="tool-group"><a data-v-cdecbe24="" id="like-button-2315532" class="like-button"><span data-v-cdecbe24="">赞</span></a> <a class=""><i class="iconfont ic-comment"></i> <span>回复</span></a> <!----> <!----></div></div></div> <div class="sub-comment-list"><div id="comment-2320785" class="sub-comment"><p><div data-v-f3bf5228="" class="v-tooltip-container" style="z-index: 0;"><div class="v-tooltip-content"><a href="/u/92a1227beb27" target="_blank">jacksu在简书</a>:
        </div> <!----></div> <span><a href="/users/7bdccac1f8dd" class="maleskine-author" target="_blank" data-user-slug="7bdccac1f8dd">@mr_ly</a>  这要看你的join复杂度,如果key重复比较多的话,应该join生成的表格比较大。</span></p> <div class="sub-tool-group"><span>2016.05.10 13:03</span> <a class=""><i class="iconfont ic-comment"></i> <span>回复</span></a> <!----> <!----></div></div><div id="comment-2327170" class="sub-comment"><p><div data-v-f3bf5228="" class="v-tooltip-container" style="z-index: 0;"><div class="v-tooltip-content"><a href="/u/7bdccac1f8dd" target="_blank">mr_ly</a>:
        </div> <!----></div> <span><a href="/users/92a1227beb27" class="maleskine-author" target="_blank" data-user-slug="92a1227beb27">@jacksu_</a>  对了 想请问一下 dataframe 有update操作吗?  主要是想用另一张表的一些字段 跟新 update 这张表  我发现好像不能update  所以暂时是用join操作 把要更新的字段和这表连接 最后 select 出来 插入一张新表。。。</span></p> <div class="sub-tool-group"><span>2016.05.10 22:28</span> <a class=""><i class="iconfont ic-comment"></i> <span>回复</span></a> <!----> <!----></div></div><div id="comment-2342934" class="sub-comment"><p><div data-v-f3bf5228="" class="v-tooltip-container" style="z-index: 0;"><div class="v-tooltip-content"><a href="/u/92a1227beb27" target="_blank">jacksu在简书</a>:
        </div> <!----></div> <span><a href="/users/7bdccac1f8dd" class="maleskine-author" target="_blank" data-user-slug="7bdccac1f8dd">@mr_ly</a>  最好举一个简单的例子</span></p> <div class="sub-tool-group"><span>2016.05.12 08:27</span> <a class=""><i class="iconfont ic-comment"></i> <span>回复</span></a> <!----> <!----></div></div> <div class="sub-comment more-comment"><a class="add-comment-btn"><i class="iconfont ic-subcomment"></i> <span>添加新评论</span></a> <span class="line-warp">
      还有2条评论,
      <a>展开查看</a></span> <!----> <!----></div> <!----></div></div><div id="comment-2123702" class="comment"><div><div class="author"><div data-v-f3bf5228="" class="v-tooltip-container" style="z-index: 0;"><div class="v-tooltip-content"><a href="/u/1754e3486a09" target="_blank" class="avatar"><img src="//upload.jianshu.io/users/upload_avatars/1944513/77100324246b?imageMogr2/auto-orient/strip|imageView2/1/w/114/h/114/format/webp"></a>  </div> <!----></div> <div class="info"><a href="/u/1754e3486a09" target="_blank" class="name">fisk</a> <!----> <!----> <div class="meta"><span>2楼 · 2016.04.21 18:08</span></div></div></div> <div class="comment-wrap"><p>哥,有更多的关于DataSet的讲解没 <img src="http://assets.jianshu.io/assets/emojis/smile.png" alt=":smile:" title=":smile:" class="emoji" width="20" height="20"> </p> <div class="tool-group"><a data-v-cdecbe24="" id="like-button-2123702" class="like-button"><span data-v-cdecbe24="">赞</span></a> <a class=""><i class="iconfont ic-comment"></i> <span>回复</span></a> <!----> <!----></div></div></div> <div class="sub-comment-list"><div id="comment-2180213" class="sub-comment"><p><div data-v-f3bf5228="" class="v-tooltip-container" style="z-index: 0;"><div class="v-tooltip-content"><a href="/u/92a1227beb27" target="_blank">jacksu在简书</a>:
        </div> <!----></div> <span><a href="/users/1754e3486a09" class="maleskine-author" target="_blank" data-user-slug="1754e3486a09">@fisk</a> 谢谢支持,最近比较忙,后面有时间专门写写DataSet的应用。</span></p> <div class="sub-tool-group"><span>2016.04.26 21:44</span> <a class=""><i class="iconfont ic-comment"></i> <span>回复</span></a> <!----> <!----></div></div> <div class="sub-comment more-comment"><a class="add-comment-btn"><i class="iconfont ic-subcomment"></i> <span>添加新评论</span></a> <!----> <!----> <!----></div> <!----></div></div></div></div> <!----> <div><!----></div></div></div>

猜你喜欢

转载自blog.csdn.net/weixin_41919236/article/details/84779922