日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

Java spark中的各种范型接口Function的区别(持续更新中)

發布時間:2023/12/31 java 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java spark中的各种范型接口Function的区别(持续更新中) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

表格來自[2]

ClassFunction Type
Function<T, R>T => R
DoubleFunction<T>T => Double
PairFunction<T, K, V>T => Tuple2<K, V>
FlatMapFunction<T, R>T => Iterable<R>
DoubleFlatMapFunction<T>T => Iterable<Double>
PairFlatMapFunction<T, K, V>T => Iterable<Tuple2<K, V>>
Function2<T1, T2, R>T1, T2 => R (function of two arguments)

#------------------------------------------Function2用法---------------------------------------------------------------------------------------------

private static Function2 <Long, Long,Long> func2=new Function2<Long,Long,Long>()
{ private static final long serialVersionUID = 1L;

? ? public Long call(Long v1, Long v2) throws Exception
? ? {
? ? ? ? return v1+v2;
? ? }

};

?

// 第二步,對打上隨機前綴的key進行局部聚合。(調用)
? ? ? ? JavaPairRDD<String, Long> localAggrRdd = randomPrefixRdd.reduceByKey(func2);
? ? ? ? System.out.println("------------第2步-----localAggrRdd ----------------------");
? ? ? ? System.out.print(localAggrRdd.collect());
? ? ? ? System.out.println();

#--------------------------------------------------------PairFunction用法-----------------------------------------------------------------------------------------

// 首先將數據量比較小的RDD的數據,collect到Driver中來。List<Tuple2<Long,String>> rdd1Data = rdd1.collect();// 然后使用Spark的廣播功能,將小RDD的數據轉換成廣播變量,這樣每個Executor就只有一份RDD的數據。 // 可以盡可能節省內存空間,并且減少網絡傳輸性能開銷。final Broadcast<List<Tuple2<Long, String>>> rdd1DataBroadcast = sc.broadcast(rdd1Data);// 對另外一個RDD執行map類操作,而不再是join類操作。JavaPairRDD<Long, Tuple2<String, String>> joinedRdd = rdd2.mapToPair(new PairFunction<Tuple2<Long, String>, Long, Tuple2<String, String>>(){private static final long serialVersionUID = 1L;// 下面左側是返回的類型,右側是輸入的數據類型@Overridepublic Tuple2<Long, Tuple2<String, String>> call(Tuple2<Long, String> tuple) throws Exception{// 在算子函數中,通過廣播變量,獲取到本地Executor中的rdd1數據。List<Tuple2<Long, String>> rdd1Data = rdd1DataBroadcast.value();// 可以將rdd1的數據轉換為一個Map,便于后面進行join操作。Map<Long, String> rdd1DataMap = new HashMap<Long, String>();for (Tuple2<Long, String> data : rdd1Data){rdd1DataMap.put(data._1, data._2);}// 獲取當前RDD數據的key以及value。Long key = tuple._1;String value = tuple._2;// 從rdd1數據Map中,根據key獲取到可以join到的數據。String rdd1Value = rdd1DataMap.get(key);return new Tuple2<Long, Tuple2<String, String>>(key, new Tuple2<String, String>(value, rdd1Value));}});

針對上面紛繁復雜的函數類型我們可以分析得到下面的規律(很多變量類型都是抄來抄去)

#---------------------------------------------------------------------------------------------------------------------------------------------

Reference:

[1]Spark的Java API例子詳解

[2]Function Classes

總結

以上是生活随笔為你收集整理的Java spark中的各种范型接口Function的区别(持续更新中)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。