2016-12-14 29 views
1

我們假設我有一個CSV文件中的兩列A和B的表。我從列A中選擇最大值[最大值= 100],並且我需要使用JavaRDD操作返回B列[返回值= AliExpress]的相應值而不使用數據框。SparkRDD操作

輸入表:

COLUMN A  Column B 
    56  Walmart 
    72  Flipkart 
    96  Amazon 
    100  AliExpress 

輸出表:

COLUMN A  Column B 
    100  AliExpress 

這是我試過至今

源碼:

SparkConf conf = new SparkConf().setAppName("SparkCSVReader").setMaster("local"); 
JavaSparkContext sc = new JavaSparkContext(conf); 
JavaRDD<String> diskfile = sc.textFile("/Users/apple/Downloads/Crash_Data_1.csv"); 
JavaRDD<String> date = diskfile.flatMap(f -> Arrays.asList(f.split(",")[1])); 

從上面的代碼我可以只取一家公司lumn數據。反正有兩列。有什麼建議麼。提前致謝。

回答

1

您可以使用toptakeOrdered函數來實現它。

rdd.top(1) //gives you top element in your RDD 
0

數據:

COLUMN_A,Column_B 
56,Walmart 
72,Flipkart 
96,Amazon 
100,AliExpress 

創建DF使用火花2

val df = sqlContext.read.option("header", "true") 
        .option("inferSchema", "true") 
        .csv("filelocation") 

df.show 
import sqlContext.implicits._ 

import org.apache.spark.sql.functions._ 

使用數據幀的功能

df.orderBy(desc("COLUMN_A")).take(1).foreach(println) 

OUTPUT:

[100,AliExpress] 

使用RDD功能

df.rdd 
    .map(row => (row(0).toString.toInt, row(1))) 
    .sortByKey(false) 
    .take(1).foreach(println) 

OUTPUT:

(100,AliExpress) 
+0

你可以轉換此代碼段轉換成Java請... df.rdd 。 map(row =>(row(0).toString.toInt,row(1))) .sortByKey(false) .take(1).foreach(println) –