sparkrdd操作

xxslljrj  于 2021-05-29  发布在  Hadoop
关注(0)|答案(2)|浏览(360)

假设在csv文件中有一个包含两列a和b的表。我从列a[max value=100]中选取最大值,需要使用javardd操作返回列b[return value=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]));

从上面的代码中,我只能获取一列数据。有没有得到两列。任何建议。提前谢谢。

f1tvaqid

f1tvaqid1#

数据:

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)
e0bqpujr

e0bqpujr2#

你可以用任何一个 top 或者 takeOrdered 实现它的功能。

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

相关问题