SparkRDD操作

时间:2016-12-14 11:35:08

标签: hadoop apache-spark apache-spark-sql spark-dataframe rdd

假设我有一个CSV文件中有两列A和B的表。我从A列中选择最大值[最大值= 100],我需要使用JavaRDD操作返回B列[返回值= AliExpress]的相应值,而不使用DataFrames。

输入表:

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]));

从上面的代码我只能获取一个列数据。反正有两列。有什么建议。提前谢谢。

2 个答案:

答案 0 :(得分:1)

您可以使用takeOrderedrdd.top(1) //gives you top element in your RDD 函数来实现它。

{{1}}

答案 1 :(得分:0)

数据:

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

使用 Spark 2

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

df.show
import sqlContext.implicits._

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

使用Dataframe函数

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

<强>输出:

[100,AliExpress]

使用RDD功能

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

<强>输出:

   (100,AliExpress)