Выбрать только определенные атрибуты в списке [classType]?

Я пытаюсь выбрать определенные атрибуты в списке типа класса дела. Позволь мне объяснить

Это мой файл 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.type, nayaDeshiList.country, который у меня не работает. Может кто-нибудь предложить мне лучший подход?

Примечание. Меня интересует только решение этой проблемы с использованием чистого Scala, а не на каком-либо вычислительном механизме, таком как Spark.

Вывод: вывод должен сохранять тип класса. Например, он должен быть того же типа, как этот nayaDeshiList: List[Deshi]. Единственная разница в том, что он должен содержать только определенные столбцы, как указано выше. Спасибо


person Community    schedule 10.02.2018    source источник


Ответы (1)


Это то, что вы имеете в виду?

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

Результат - List((String,String,String)). Вы не указываете, как вы хотите организовать элементы данных. Я помещаю их в кортеж, но есть и другие варианты.

person jwvh    schedule 10.02.2018
comment
спасибо @jwvh Я хочу выполнить вычисления (агрегированные операции), как мы это делаем с таблицей в базе данных, не могли бы вы предоставить мне ссылку для других вариантов или, пожалуйста, обновите ответ, если это возможно. - person ; 10.02.2018
comment
@Button Monkey, пожалуйста, четко объясните, что именно вы хотите делать при агрегировании? Я считаю, что приведенный выше ответ является правильным для вашего вопроса. в противном случае обновите свой вопрос ... - person Balaji Reddy; 10.02.2018
comment
Мне нужно найти повторяющиеся записи только после выбора этих полей. Мое определение повторяющейся записи таково: если страна и возраст совпадают, это повторяющаяся запись. Мне нужно сохранить все эти повторяющиеся записи и, наконец, выполнить операцию groupBy на основе поля country @BDR - person ; 11.02.2018
comment
@jwvh спасибо за ваш ответ, этот вывод дает мне кортеж строкового типа, могу ли я получить вывод с тем же типом класса Deshi, но только с тремя именами столбцов? наконец, я хочу выполнить groupBy() операцию с groupBy (страна, возраст) ...... - person ; 12.02.2018
comment
@ButtonMonkey; Есть несколько причин, по которым на ваш вопрос не так много ответов. 1-Первоначальный вопрос был довольно расплывчатым. Я догадался, чего, как я думал, ты хочешь. 2-К тому времени, когда вы обновили вопрос, он уже был немного устаревшим, и многие читатели SO не замечают более старых вопросов, даже после того, как они были обновлены. 3-Обновленный вопрос лишь немного связан с исходным вопросом. Он заслуживает отдельного (нового) вопроса, на который он получит больше внимания и ответов. 4-Обновленный вопрос все еще немного расплывчатый. Добавление ожидаемого вывода для образца ввода поможет прояснить его. - person jwvh; 12.02.2018
comment
Спасибо за предложение @jwvh. Я обновил здесь новый вопрос: stackoverflow.com/questions/48741714/, пожалуйста, проверьте этот вопрос выше - person ; 12.02.2018