假设我有一个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]));
从上面的代码我只能获取一个列数据。反正有两列。有什么建议。提前谢谢。
答案 0 :(得分:1)
您可以使用takeOrdered
或rdd.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
创建dfval 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)