Cast z Row na List w Scali

Cast z Row na List w Scali
ToTomki
  • Rejestracja:około 7 lat
  • Ostatnio:dzień
  • Postów:1320
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 4 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:6 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:1320
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:1320
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:prawie 5 lat
  • Ostatnio:4 miesiące
  • 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.
Kliknij, aby dodać treść...

Pomoc 1.18.8

Typografia

Edytor obsługuje składnie Markdown, w której pojedynczy akcent *kursywa* oraz _kursywa_ to pochylenie. Z kolei podwójny akcent **pogrubienie** oraz __pogrubienie__ to pogrubienie. Dodanie znaczników ~~strike~~ to przekreślenie.

Możesz dodać formatowanie komendami , , oraz .

Ponieważ dekoracja podkreślenia jest przeznaczona na linki, markdown nie zawiera specjalnej składni dla podkreślenia. Dlatego by dodać podkreślenie, użyj <u>underline</u>.

Komendy formatujące reagują na skróty klawiszowe: Ctrl+B, Ctrl+I, Ctrl+U oraz Ctrl+S.

Linki

By dodać link w edytorze użyj komendy lub użyj składni [title](link). URL umieszczony w linku lub nawet URL umieszczony bezpośrednio w tekście będzie aktywny i klikalny.

Jeżeli chcesz, możesz samodzielnie dodać link: <a href="link">title</a>.

Wewnętrzne odnośniki

Możesz umieścić odnośnik do wewnętrznej podstrony, używając następującej składni: [[Delphi/Kompendium]] lub [[Delphi/Kompendium|kliknij, aby przejść do kompendium]]. Odnośniki mogą prowadzić do Forum 4programmers.net lub np. do Kompendium.

Wspomnienia użytkowników

By wspomnieć użytkownika forum, wpisz w formularzu znak @. Zobaczysz okienko samouzupełniające nazwy użytkowników. Samouzupełnienie dobierze odpowiedni format wspomnienia, zależnie od tego czy w nazwie użytkownika znajduje się spacja.

Znaczniki HTML

Dozwolone jest używanie niektórych znaczników HTML: <a>, <b>, <i>, <kbd>, <del>, <strong>, <dfn>, <pre>, <blockquote>, <hr/>, <sub>, <sup> oraz <img/>.

Skróty klawiszowe

Dodaj kombinację klawiszy komendą notacji klawiszy lub skrótem klawiszowym Alt+K.

Reprezentuj kombinacje klawiszowe używając taga <kbd>. Oddziel od siebie klawisze znakiem plus, np <kbd>Alt+Tab</kbd>.

Indeks górny oraz dolny

Przykład: wpisując H<sub>2</sub>O i m<sup>2</sup> otrzymasz: H2O i m2.

Składnia Tex

By precyzyjnie wyrazić działanie matematyczne, użyj składni Tex.

<tex>arcctg(x) = argtan(\frac{1}{x}) = arcsin(\frac{1}{\sqrt{1+x^2}})</tex>

Kod źródłowy

Krótkie fragmenty kodu

Wszelkie jednolinijkowe instrukcje języka programowania powinny być zawarte pomiędzy obróconymi apostrofami: `kod instrukcji` lub ``console.log(`string`);``.

Kod wielolinijkowy

Dodaj fragment kodu komendą . Fragmenty kodu zajmujące całą lub więcej linijek powinny być umieszczone w wielolinijkowym fragmencie kodu. Znaczniki ``` lub ~~~ umożliwiają kolorowanie różnych języków programowania. Możemy nadać nazwę języka programowania używając auto-uzupełnienia, kod został pokolorowany używając konkretnych ustawień kolorowania składni:

```javascript
document.write('Hello World');
```

Możesz zaznaczyć również już wklejony kod w edytorze, i użyć komendy  by zamienić go w kod. Użyj kombinacji Ctrl+`, by dodać fragment kodu bez oznaczników języka.

Tabelki

Dodaj przykładową tabelkę używając komendy . Przykładowa tabelka składa się z dwóch kolumn, nagłówka i jednego wiersza.

Wygeneruj tabelkę na podstawie szablonu. Oddziel komórki separatorem ; lub |, a następnie zaznacz szablonu.

nazwisko;dziedzina;odkrycie
Pitagoras;mathematics;Pythagorean Theorem
Albert Einstein;physics;General Relativity
Marie Curie, Pierre Curie;chemistry;Radium, Polonium

Użyj komendy by zamienić zaznaczony szablon na tabelkę Markdown.

Lista uporządkowana i nieuporządkowana

Możliwe jest tworzenie listy numerowanych oraz wypunktowanych. Wystarczy, że pierwszym znakiem linii będzie * lub - dla listy nieuporządkowanej oraz 1. dla listy uporządkowanej.

Użyj komendy by dodać listę uporządkowaną.

1. Lista numerowana
2. Lista numerowana

Użyj komendy by dodać listę nieuporządkowaną.

* Lista wypunktowana
* Lista wypunktowana
** Lista wypunktowana (drugi poziom)

Składnia Markdown

Edytor obsługuje składnię Markdown, która składa się ze znaków specjalnych. Dostępne komendy, jak formatowanie , dodanie tabelki lub fragmentu kodu są w pewnym sensie świadome otaczającej jej składni, i postarają się unikać uszkodzenia jej.

Dla przykładu, używając tylko dostępnych komend, nie możemy dodać formatowania pogrubienia do kodu wielolinijkowego, albo dodać listy do tabelki - mogłoby to doprowadzić do uszkodzenia składni.

W pewnych odosobnionych przypadkach brak nowej linii przed elementami markdown również mógłby uszkodzić składnie, dlatego edytor dodaje brakujące nowe linie. Dla przykładu, dodanie formatowania pochylenia zaraz po tabelce, mogłoby zostać błędne zinterpretowane, więc edytor doda oddzielającą nową linię pomiędzy tabelką, a pochyleniem.

Skróty klawiszowe

Skróty formatujące, kiedy w edytorze znajduje się pojedynczy kursor, wstawiają sformatowany tekst przykładowy. Jeśli w edytorze znajduje się zaznaczenie (słowo, linijka, paragraf), wtedy zaznaczenie zostaje sformatowane.

  • Ctrl+B - dodaj pogrubienie lub pogrub zaznaczenie
  • Ctrl+I - dodaj pochylenie lub pochyl zaznaczenie
  • Ctrl+U - dodaj podkreślenie lub podkreśl zaznaczenie
  • Ctrl+S - dodaj przekreślenie lub przekreśl zaznaczenie

Notacja Klawiszy

  • Alt+K - dodaj notację klawiszy

Fragment kodu bez oznacznika

  • Alt+C - dodaj pusty fragment kodu

Skróty operujące na kodzie i linijkach:

  • Alt+L - zaznaczenie całej linii
  • Alt+, Alt+ - przeniesienie linijki w której znajduje się kursor w górę/dół.
  • Tab/⌘+] - dodaj wcięcie (wcięcie w prawo)
  • Shit+Tab/⌘+[ - usunięcie wcięcia (wycięcie w lewo)

Dodawanie postów:

  • Ctrl+Enter - dodaj post
  • ⌘+Enter - dodaj post (MacOS)