仅选择列表[classType]中的特定属性?

时间:2018-02-10 08:07:19

标签: scala list scala-collections case-class

我正在尝试在案例类类型列表中选择特定属性。让我解释一下

这是我的test.txt文件:

india|M|IND|P|15951124869|15
usa|F|usa|R|15951178869|25
australia|M|aus|S|15951189869|35
kenya|M|KN|F|15956624869|55
russia|M|rus|u|15981124869|75
china|T|ch|L|15951128869|95
england|F|eng|Z|15959124869|65
germany|F|ger|I|15987124869|25
finland|M|fin|H|15967124869|45
singapore|F|sing|I|15956124869|65

案例类:

case class Deshi(country: String, gender: String, countryCode: String, statusJi: String, gadiNumber: String, age: String)
defined class Deshi

阅读test.txt文件:

scala> val deshiLines=readFileC("/Users/neha.gambhir/Desktop/test.txt")
deshiLines: List[String] = List(india|M|IND|P|15951124869|15, usa|F|usa|R|15951178869|25, australia|M|aus|S|15951189869|35, kenya|M|KN|F|15956624869|55, russia|M|rus|u|15981124869|75, china|T|ch|L|15951128869|95, england|F|eng|Z|15959124869|65, germany|F|ger|I|15987124869|25, finland|M|fin|H|15967124869|45, singapore|F|sing|I|15956124869|65)

这是我的案例类类型列表:

scala> val nayaDeshiList=deshiLines.map{  raw_line => 
     |             val columns = raw_line.split("\\|")
     |  Deshi(columns(0), columns(1), columns(2), columns(3), columns(4), columns(5))
     |  } 
nayaDeshiList: List[Deshi] = List(Deshi(india,M,IND,P,15951124869,15), Deshi(usa,F,usa,R,15951178869,25), Deshi(australia,M,aus,S,15951189869,35), Deshi(kenya,M,KN,F,15956624869,55), Deshi(russia,M,rus,u,15981124869,75), Deshi(china,T,ch,L,15951128869,95), Deshi(england,F,eng,Z,15959124869,65), Deshi(germany,F,ger,I,15987124869,25), Deshi(finland,M,fin,H,15967124869,45), Deshi(singapore,F,sing,I,15956124869,65))

我只想从上面country, gender, age中选择nayaDeshiList。由于此nayaDeshiList类型属于案例类Deshi,因此我执行nayaDeshiList.typenayaDeshiList.country这对我不起作用。有人可以建议我一个更好的方法吗?

注意:我只对使用纯Scala方法解决这个问题感兴趣,而不是像Spark这样的任何计算引擎

输出:输出应保留类类型。例如,它应该仍然具有相同的类型,例如nayaDeshiList: List[Deshi]。唯一的区别是它应该只包含上面提到的特定列。感谢

1 个答案:

答案 0 :(得分:1)

这是你的意思吗?

nayaDeshiList.map(x => (x.country, x.gender, x.age))

结果是List((String,String,String))。您没有说明您希望如何组织数据元素。我把它们放在一个元组中,但还有其他选择。