如何使用Scala过滤表中的几行

问题描述 投票:-6回答:2

使用Scala:我有一个emp表,如下所示

id, name,   dept,   address
1,  a,  10, hyd
2,  b,  10, blr
3,  a,  5,  chn
4,  d,  2,  hyd
5,  a,  3,  blr
6,  b,  2,  hyd

码:

val inputFile = sc.textFile("hdfs:/user/edu/emp.txt"); 
val inputRdd = inputFile.map(iLine => (iLine.split(",")(0),
                             iLine.split(",")(1), 
                             iLine.split(",")(3)
                            )); 
// filtering only few columns Now i want to pull hyd addressed employees complete data 

问题:我不想打印所有的emp细节,我想只打印几个所有来自hyd的emp细节。

  1. 我已将此emp数据集加载到Rdd中
  2. 我把这个Rdd拆分为','
  3. 现在我想打印只有hyd地址的emp。
scala apache-spark
2个回答
0
投票

我认为以下解决方案将有助于解决您的问题。

  val fileName = "/path/stact_test.txt"
  val strRdd = sc.textFile(fileName).map { line =>
    val data = line.split(",")
    (data(0), data(1), data(3))
  }.filter(rec=>rec._3.toLowerCase.trim.equals("hyd"))

分割数据后,使用元组RDD中的第3项过滤位置。

输出:

(1,  a, hyd)
(4,  d,  hyd)
(6,  b,  hyd)

-1
投票

您可以尝试使用数据框


val viewsDF=spark.read.text("hdfs:/user/edu/emp.txt")
val splitedViewsDF = viewsDF.withColumn("id", split($"value",",").getItem(0))
                            .withColumn("name", split($"value", ",").getItem(1))
                            .withColumn("address", split($"value", ",").getItem(3))
                            .drop($"value")
                            .filter(df("address").equals("hyd") )

© www.soinside.com 2019 - 2024. All rights reserved.