1. 程式人生 > >Spark倒排,求中位數,CountOnce

Spark倒排,求中位數,CountOnce

倒排序
輸入:
id1 spark hadoop
id2 scala spark
id3 java hadoop spark
id4 scala java
id5 the spark
id6 the hadoop and spark
id7 hadoop Flink storm spark
輸出:
Flink id7
scala id2 id4
spark id1 id2 id3 id5 id6 id7
hadoop id1 id3 id6 id7
java id3 id4
and id6
storm id7
the id5 id6
程式碼(Scala版):

package com.dt.spark.cores.scala



import org.apache.spark.{SparkContext, SparkConf}

import scala.collection.mutable



object InvertedIndex {
def main (args: Array[String]) {

val conf = new SparkConf().setAppName("inverted index").setMaster("local")
val sc = new SparkContext(conf)

val data = sc.textFile
("E:\\workspases\\data\\invertedIndex.txt") val keydata = data.map(line => line.split("\t")).map(linetemp =>(linetemp(0),linetemp(1))) val inverting = keydata.flatMap(file =>{ val list = new mutable.LinkedHashMap[String,String]() val words = file._2.split(" ").iterator while (words.hasNext) { list.put
(words.next(),file._1) } list }) inverting.reduceByKey(_+" "+_).map(pari=>pari._1+"\t"+pari._2).foreach(println) sc.stop() } }

中位數

package com.dt.spark.cores.scala

import org.apache.spark.{SparkContext, SparkConf}



object Median {

def main (args: Array[String]) {

val conf = new SparkConf().setAppName("Median").setMaster("local")
val sc = new SparkContext(conf)

val data = sc.textFile("E:\\workspases\\data\\Median.txt")

val words = data.flatMap(_.split(" ")).map(word => word.toInt)
val number = words.map(word =>(word/4,word)).sortByKey()
val pariCount = words.map(word => (word/4,1)).reduceByKey(_+_).sortByKey()
val count = words.count().toInt
var mid =0
if(count%2 != 0)
{
mid = count/2+1
}else
{
mid = count/2
}

var temp =0
var temp1= 0
var index = 0
val tongNumber = pariCount.count().toInt

var foundIt = false
for(i <- 0 to tongNumber-1 if !foundIt)
{
temp = temp + pariCount.collectAsMap()(i)
temp1 = temp - pariCount.collectAsMap()(i)
if(temp >= mid)
{
index = i
foundIt = true
}
}
val tonginneroffset = mid - temp1

val median = number.filter(_._1==index).takeOrdered(tonginneroffset)
sc.setLogLevel("ERROR")
println(median(tonginneroffset-1)._2)
sc.stop()

}
}

CountOnce
問題描述:
假設HDFS只儲存一個標號為ID的Block,每份資料儲存2個備份,這樣就有2個機器儲存了相同的資料。其中ID是小於10億的整數。若有一個數據塊丟失,則需要找到哪個是丟失的資料塊。
在某個時間,如果得到一個數據塊ID的列表,能否快速地找到這個表中僅出現一次的ID?即快速找出出現故障的資料塊的ID。
問題闡述:已知一個數組,陣列中只有一個數據是出現一遍的,其他資料都是出現兩遍,將出現一次的資料找出。
輸入:
5
3
2
2
3
5
7
6
6
9
9
10
11
16
11
10
16

輸出:
7

程式碼:

package com.dt.spark.cores.scala

import org.apache.spark.{SparkContext, SparkConf}


object CountOnce {

def main (args: Array[String]) {
val conf = new SparkConf().setAppName("CountOnce").setMaster("local")
val sc = new SparkContext(conf)

val data = sc.textFile("E:\\workspases\\data\\CountOnce.txt")
val word = data.map(line => line.toInt)
val result =word.reduce(_^_)
println(result)
}
}

相關推薦

Spark位數CountOnce

倒排序 輸入: id1 spark hadoop id2 scala spark id3 java hadoop spark id4 scala java id5 the spark id6 the hadoop and spark id7 ha

京東測試系機試題位數easy

  做了京東的機試題目,有一個題目是給出一個整型無序陣列,求增加一個數(可以是整型也可以是float型),不改變這個陣列的中位數。   首先,中位數的意思就是,從小到大進行排列,若是奇數n的話,則中間一個為中位數。若是偶數n的話,則是中間兩個數的平均值。  

51nod 1096 距離之和最小 思維題位數

code turn ima col blog images png width span 題目: 在一條直線上,與兩個點距離之和最小的點,是怎樣的點? 很容易想到,所求的點在這兩個已知點的中間,因為兩點之間距離最短。 在一條直線上,與三個點距離之和最小的點,是怎樣

【面試題】給多個無序正整數位數

題目:給你很多很多正整數,但它們是無序的,找出它們的中位數。 最開始就想說使用快排,先將這些整數進行排序,然後找到中位數,但又想到可能不是面試官想要的答案,於是又採用了其他方法,最終也沒完全解決出來。 【經驗總結:當面試官問了一個演算法題後,如果想不到優化一點的方法,就先

隨機生成60位同學成績他們的平均數位數眾數等

nbsp ret list () random rand sta import count import randomimport numpy as npdef random_int_list(start, stop, length): start, stop = (

兩個有序數組合並位數(複雜度為O(m+n))

先將兩個有序數組合併成為一個有序陣列,然後再求中位數。合併時,判斷條件是i<m || j<n 特別注意,中位數用double,int資料進行計算時,要先轉化為double(直接賦值即可),

給定一個正整數位數以及正序逆序輸出

給定一個正整數,求其位數以及正序逆序輸出 #include<stdio.h> int Count(int n)//求正整數的位數 { int tmp=0; do { n=n/10; tmp++; }while(n!=0); return tmp; } void PrintReve

劍指offer系列——二叉搜尋樹的第k個結點資料流的位數滑動視窗的最大值

二叉搜尋樹的第k個結點 題目描述 給定一棵二叉搜尋樹,請找出其中的第k小的結點。例如, (5,3,7,2,4,6,8)    中,按結點數值大小順序第三小結點的值為4。 解題思路: 二叉搜尋樹中序遍歷就能排好序,所以中序遍歷到第k個結點就是第k小的結點。 程式

Oracle關於處理小數點位數的幾個函式取小數位數Oracle查詢函式

關於處理小數點位數的幾個oracle函式() 1. 取四捨五入的幾位小數 select round(1.2345, 3) from dual; 結果:1.235 2. 保留兩位小數,只舍 select trunc(1.2345, 2) from dual; 結果:1.23 select trun

BZOJ--1045-- 糖果傳遞(位數排序)

題目連結 :BZOJ--1045-- 糖果傳遞 我們知道如果不頭尾相連的話 直接求一個字首和 答案為ans+=s[i] 不相連的話就是1 和n之間斷開 頭尾相連的話就是 在第k個人之間斷開 設A[i]為 a[i]-平均數的值 S[i] 表示字首和 第k個人斷開 A[k+1]   

位數找第k小,還存在問題

找第k小 上次介紹了找第二大使用的方法時,使用錦標賽的方法,找到最大,在最大的手下敗將裡找第二大,也就是亞軍在冠軍的手下敗將裡產生,亞軍只敗給過冠軍,這種方法比較次數時(n-1) + (logn-1),這個時間複雜度最優的方案了為O(n) 那麼怎麼找第k大了,季軍只能在冠軍和亞軍的手下敗

二叉樹 給定一個節點序遍歷下一個節點

題目描述 給定一個二叉樹和其中的一個結點,請找出中序遍歷順序的下一個結點並且返回。注意,樹中的結點不僅包含左右子結點,同時包含指向父結點的指標。 using namespace std; /

給定任意正整數數字位數並順序、逆序輸出各位數字

{int i;if (n<=0){printf("NULL");}else if (n>0) {for ( i=1;(n/10)!=0;i++){n=n/10;           }return i;}}int main(){printf("%d\n",Several_digits(0));pr

給一個正整數n位數。並按正序輸出逆序輸出

求出位數通過讓給定的正整數n整除10,且每整除一次讓統計位數的變數count自增一,返回count得到位數。#include<stdio.h> int GetFigure(int n) { int count=0; do { count ++;

二叉樹遍歷(已知前序和後序遍歷序遍歷的可能的序列數)

    我們都很熟悉二叉樹的前序、中序、後序遍歷,在資料結構中常提出這樣的問題:已知一棵二叉樹的前序和中序遍歷,求它的後序遍歷,相應的,已知一棵二叉樹的後序遍歷和中序遍歷序列你也能求出它的前序遍歷。然而給定一棵二叉樹的前序和後序,你卻不能確定其中序遍歷序列,考慮如下圖中的幾棵二叉樹:    所有這些二叉樹都有

轉 Oracle關於處理小數點位數的幾個函式取小數位數Oracle查詢函式

1 關於處理小數點位數的幾個oracle函式() 2 1. 取四捨五入的幾位小數 3 select round(1.2345, 3) from dual; 4 結果:1.235 5 2. 保留兩位小數,只舍 6 select trunc(1.2345, 2) fr

多陣列位數k大數 -- 二分思路

多陣列k大數 給定兩個有序陣列arr1和arr2,在給定一個整數k,返回兩個陣列的所有數中第K小的數。 例如: arr1 = {1,2,3,4,5}; arr2 = {3,4,5}; K = 1; 因為1為所有數中最小的,所以返回1; arr1 =

leetcode:Median of Two Sorted Arrays (找兩個序列的位數O(log (m+n))限制) 【面試演算法】

題目: There are two sorted arrays A and B of size m and n respectively. Find the median of the two sorted arrays. The overall run time comp

R語言與資料模型(1)-平均,方差,位數位數極差

1.求平均數。> x<-c(1,10,20,30,40,50,NA,60)> xm<-mean(x)> xm[1] NA#na.rm表示允許缺失資料NA> xm<-mean(x,na.rm=TRUE)> xm[1] 30.142

java代碼:用for循環求和偶數和奇數和打印水仙花數統計水仙花數

java代碼 for循環 求和 打印水仙花數統計水仙花 用for循環求和,求偶數和,求奇數和,打印水仙花數,統計水仙花數package loop; public class For1 {public static void main(String[] args) {int sum=0;for(