Cast z Row na List w Scali

Cast z Row na List w Scali
ToTomki
  • Rejestracja:około 7 lat
  • Ostatnio:dzień
  • Postów:1337
0

Nie hejtujcie za niefunkcyjne podejście, na ten moment mam inny problem.

Mam scalową (nie javową) listę, której elementami są rowy (utworzone tak, że na dataframe zastosowałem .collectAsList().asScala.toList). Lista rowów.
Chciałbym żeby listę rowów przerobić na listę list (decelowo chciałbym mieć listę double, przy czym double'ami by były średnie z tych list w dużej liście, ale na rowach nie umiem operować i totalnie typu nie czuję).

Ktoś doradzi jak scastować te rowy w liście?

99xmarcin
Pokaż kod, powiec jaki ORM? Slick? czy coś innego. Z tego (niezbyt czytelnego) opisu ciężko wywnioskować gdzie jest problem. Tak jak piszę kolega @DisQ mapujesz Row'sy na List'sy i po kłopocie. Czy może nie tu jest problem?
stivens
Slick to nie do konca ORM jest
stivens
  • Rejestracja:ponad 8 lat
  • Ostatnio:około 2 godziny
2

Chciałbym żeby listę rowów

Kopiesz rowy od 7 do tamtego drzewa?

A z czego ten wiersz? Ze Sparka?
Generalnie nie wiem jak w Sparku ale powinna byc jakas metoda typu row.toList/Seq/Buffer/Vector/...


λλλ
edytowany 3x, ostatnio: stivens
ToTomki
toSeq jak najbardziej jest :)
stivens
No to .toSeq.toList
DQ
  • Rejestracja:prawie 10 lat
  • Ostatnio:7 miesięcy
  • Postów:141
1

Zapewne musisz użyć funkcji map i przemapować Row na to co chcesz

ToTomki
  • Rejestracja:około 7 lat
  • Ostatnio:dzień
  • Postów:1337
0

Tak, jak najbardziej chodzi tu o Sparka.
Problem z podaniem przykładowego kodu polega na tym, że ja zwyczajnie nie jestem w stanie go napisać, bo operowanie na danych w tym języku jest dla mnie zupełną abstrakcją i czymś zupełnie innym niż to, do czego udało mi się przywyknąć i o ile rozumiem Waszą reakcję, to gdybym był w stanie podać kod, to nie musiałbym zgłaszać się na forum. Ja ugrzązłem już na etapie koncepcyjnym, a nie na tym, że mam funkcję castującą i mi ją podkreśla na czerwono.
Poniżej podaję co mniej więcej chciałbym w kodzie zobaczyć, moze komuś uda się wykryć jakieś upośledzenie w moim toku rozumowania i znajdziecie jakiś fajny młotek, który przy jednym uderzeniu wbije gwódź tak, by przybić deskę, a przy drugim uderzeniu wbije mi trochę wiedzy do łba za bardzo nie uszkadzając czaszki.

Kopiuj
val listaRowówZDataframe = innyDataFrame.select("kolumna1", "columna2").collectAsList().asScala.toList
def obliczAvg(listaRowów : Row): List[Double] = {
  // tu chciałbym wykonać cast z List[Row] na List[List] i kolejne obliczenie, przykładowo:
  tempList = listaRowów.map(x => tutaj powinno odbyć się rzutowanie x typu Row na x typu List)

  // tu dla każdej podlisty chciałbym wykonać obliczenie średniej z każdej podlisty i zwrócić List[Double]
}
// tu powinienem wywołać obliczAvg(listaRowówZDataframe)
NamingException
czemu piszesz kod po polsku?
ToTomki
Dla spójności. To był bardziej pseudokod zawierający słowa z wcześniejszego opisu problemu, normalnie nie piszę. Tak samo nie używam normalnie niewiele mówiących zmiennych typu tempList ani zmiennych nazywających się foo ;)
ToTomki
  • Rejestracja:około 7 lat
  • Ostatnio:dzień
  • Postów:1337
0

Wiedziałem że to głupie, ale nie że aż tak. Dzięki, stivens.

Edit. Ale jakby ktoś miał jakieś inne rozwiązanie i rozumiał o co mi chodzi to też może zarzucić. Zawsze fajnie się czegoś dowiedzieć.

edytowany 2x, ostatnio: ToTomki
Zobacz pozostały 1 komentarz
stivens
Co do edita to pewnie dobrze by sie bylo po prostu oswoic tez z tymi strukturami Sparka
ToTomki
Koniecznie, bo inaczej to ja tu na zawał zejdę. Ale chwilowo to ja muszę chociaż jednego taska skończyć, bo inaczej proces nauki, mimo bardzo pozytywnych ludzi, będzie wyglądał na totalne nicnierobienie. Prawdę mówiąc po chwili w Scali i Sparku już nie mogę się doczekać otrzaskania w technologiach, bo to jest miód na moje oczy uszkodzone po pisaniu w Pythonie. Tyle że tego miodu strzeże stado pszczół w postaci różnych technikaliów i jeszcze nie wiem jak do niego się dobrać :P
stivens
A z Breeze korzystacie? (taki odpowiednik numpaja)
ToTomki
Nie widziałem, ale ja tylko miałem dostęp do dość prostej apki webowej, którą ktoś stworzył dopiero ucząc się scali. Teraz podobno robią solidniejsze rzeczy. Ja jestem zupelnie nowy w firmie. Dzięki za podrzucenie linka, bo nawet jak googlowałem jakieś problemy to nazwa mi chyba przed oczami nie mignęła ani razu.
99xmarcin
  • Rejestracja:około 5 lat
  • Ostatnio:6 miesięcy
  • Postów:2420
0

Holy sh*t, with every month serenityos.org gets better & better...
ToTomki
Z całym szacuneczkiem, ale nie pytałem o link do dokumentacji klasy, na której operuję i to nie jest odpowiedź na moje pytanie. Nie rozumiem takiego podejścia. Sam nieraz ludziom pomagałem z różnymi błahymi problemami i nigdy w życiu nie przyszło mi do głowy, by w ten sposób komuś odpowiadać, zwłaszcza gdy ktoś już odpowiedź zna. Czerpiesz z tego jakąś satysfakcję? Może Cię to też zaskoczy, ale zaglądałem tam.
99xmarcin
@ToTomki: nawet jak nie znasz angielskiego tam masz to napisane czarno na białem, użyj jednej z funkcji getXXXX. Co do pomocy to robię to za darmo i w moim prywatnym czasie, nie podoba się odpowiedź to nie plusuj, ale bez takich wyrzutów proszę.
ToTomki
Problem w tym, że link do dokumentacji i złośliwy komentarz to nie jest żadna odpowiedź i może moja reakcja jest przesadzona, ale Twoje zachowanie także. Ludzie są stworzeniami emocjonalnymi i chyba nie ma co się dziwić, że akcja budzi reakcję, negatywne emocje budzą negatywne emocje. Przekierowanie do funkcji już odpowiedzią jak najbardziej by było. Teraz jak na to patrzę to wydaje mi się, że jak najbardziej mógłbym wykorzystać tę funkcję tworząc .map{x => x.get(0)} i bezpośrednio w tym miejscu licząc średnią z tego co po prawej stronie, natomiast kiedy zaglądałem w doku
ToTomki
w dokumentację to to nie było dla mnie jasne, zwłaszcza że opis funkcji "Returns the value at position i" mnie zmyliło i źle wyobraziłem sobie strukturę danych i w pewnym momencie funkcję po prostu zostawiłem, mimo że dokumentację jak najbardziej przeglądałem. Dla Ciebie moze to jest oczywiste, ale jeśli ktoś pyta o totalne podstawy to chyba to jest oczywiste, że nie ma jeszcze myślenia w danym języku ułożonego. Nie miałbym podobnego problemu używając innego języka. Powtórzę po raz kolejny, złośliwości są nie na miejscu, nieważny jaki jest ich kontekst.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.