SparkRDD 操作

Posted

技术标签:

【中文标题】SparkRDD 操作【英文标题】:SparkRDD Operations 【发布时间】:2016-12-14 11:35:08 【问题描述】:

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

输入表:

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

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

【问题讨论】:

【参考方案1】:

您可以使用toptakeOrdered 函数来实现它。

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

【讨论】:

【参考方案2】:

数据:

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._

使用数据框函数

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)

【讨论】:

你能把这段代码sn-p转换成java吗... df.rdd .map(row => (row(0).toString.toInt, row(1))) .sortByKey( false) .take(1).foreach(println)

以上是关于SparkRDD 操作的主要内容,如果未能解决你的问题,请参考以下文章

sparkRDD操作

SparkRDD的行动操作

SparkRDD的行动操作

SparkRDD的行动操作

SparkRDD基本操作

SparkRDD操作具体解释4——Action算子