Jest tu jakiś spec od #awsglue #glue #spark ?
Po odpaleniu joba, po jakims czasie dostaje bład jak niżej...

I nie wyglada to na coś złego, normalnie wszystko się przetwarza (screen)
jakieś pomysły co zrobiłem nie tak?

An error occurred while calling o5466.resolveChoice. Job aborted due to stage failure: Task 6 in stage 53.0 failed 4 times, most recent failure: Lost task 6.3 in stage 53.0 (TID 449) (10.10.1.162 executor 11): ExecutorLostFailure
mccloud - Jest tu jakiś spec od #awsglue #glue #spark ?
Po odpaleniu joba, po jakims...

źródło: comment_1664571841Ud2Sv5K0T42G0UlrKLuX0w.jpg

Pobierz
  • Odpowiedz
Czy #spark sam z siebie wywala kolumny które mają tylko nulla?

Co prawda mam #awsglue i #spark pod spodem, ale jak na wejsciu dałem 200 kolumn to polowa mi zniknęła - sprawdziłem dane i są te które zniknęły mają same nulle.
  • Odpowiedz
#dji #spark #drony Wygrzebałem swojego Sparka po prawie dwóch latach i niestety jedna bateria już się nie ładuje. Gdzie najlepiej kupić nową? Widzę, że kiepsko z dostępnością ( ͡° ʖ̯ ͡°)
@hrumque: Hmm, znasz się na tym na tyle, żeby jakieś linki podrzucić do konkretnych baterii? Bo sam się nie znam, samego moda pewnie też bym podrzucił jakiemuś elektronikowi do zrobienia.
  • Odpowiedz
Humble Bundle z książkami wydawnictwa Apress. Głównie o technologiach związanych z .NET, ML.NET, Cpłotek, TypeScript, Azure, Github.

26 książek za £14!

Pełna lista:

Practical Entity Framework Core 6

.NET Developers Guide to Augmented Reality in iOS

Lean Software Systems Engineering for Developers

Pro Cryptography and Cryptanalysis

Introducing Distributed Application Runtime (Dapr)

Pro ASP.NET Core Identity

ML.NET Revealed

Visual Studio Code Distilled

The Complete ASP.NET Core API Tutorial

Introducing .NET 6

Building Single
@Hektorrr: Dodam, że zestaw tych wszystkich książek normalnie wyceniony jest na £1,119.85.
Tak więc £14 funtów to prawie jak za darmo a jak wiadomo za darmo to uczciwa cena.
  • Odpowiedz
#pyspark #awsglue #spark

Mam sobie kolumne z danymi:

60
null
null
null
null
35
4.594595
null
null

po wczytaniu wykrywa mi typ jako

|-- TestColumn: struct
| |-- string: string
| |-- long: long

No to wrzucilem sobie:

for column, data_type in df.dtypes:
____if data_type.startswith('struct'):
________df = df.withColumn(column, col(column).cast(StringType()))

(nie ma wcięć?)

Liczyłem, że dostanę 60, null, 35, 4.594595 a tu moim oczom w bazie ukazją się potworki

"{60, null}"
"{35, null}"
@Bulldogjob: ehhh, dałem się złapać na clickbajtowy tytuł. Argumenty przeciw sparkowi są prawdziwe ale w praktyce należy je pominąć z rozważań. Zwłaszcza argument o syntax pysparka vs pandasa
  • Odpowiedz
@mlodymedyk: W skali 1:43 Spark oraz Minichamps oferują bardzo podobną jakość, różnią się mankamentami. Moim jednak skromnym zdaniem Minichamps bardziej zakorzeniło się w świadomości kolekcjonerów, mają ogromną kolekcję gdzie występują kierowcy zarówno z wyścigów, treningów jak i poszczególnych wydarzeń. Natomiast jeżeli kolega nie zbiera modeli to pewnie nie robi mu to większej różnicy, a nawet jak zbiera to raczej firmą Spark nie pogardzi. Modele jak na swoją skalę są bardzo dobrze
  • Odpowiedz
Cześć, dostałem mały projekt w pracy w pysparku. Mała transformacja danych i wrzucenie wyników do nowej tabeli. W punktach opiszę co trzeba zrobić:
1. 4 uniony
2. Pobrać tabelę z mappingiem
3. Zrobić joina (te 4 uniony i mapping)
5. Przerobić 2 kolumny na podstawie wartości, i dodać dwie puste kolumny
4. Wykonać prostą agregacje danych -> groupby po 5 kolumnach.
6. Wrzucić wyniki do nowej tabeli

Tabela z unionami ma łącznie
Apache Ambari


@PiotrokeJ: To już jest kwestia samego zarządzania (wybacz ale nie mam pojęcia jak to inaczej ubrać w słowa) translacją samego SQL na MapReduce na Hadoopie.

W tym przypadku Hadoop trochę inaczej ogarnia takie zapytanie niż spark. Dlatego jak odpalasz coś bezpośrednio na hadoopie to możesz dostać wyniki (błędne lub dobre), a w sparku już nie.

W bardzo prostych słowach i bardzo ogólnie (pomijając wszelkie niuanse) wytłumaczono to tutaj:
https://searchdatamanagement.techtarget.com/definition/SQL-on-Hadoop
  • Odpowiedz
@gabonczyk: Jak przepisze mojego JOBa, o którym wspomniałem to podziele się tutaj statystykami. :D
Chyba, ze mnie uprzedzisz i uda Ci się zrobić dobry benchmark przede mną.
To wołąj wtedy mirku.
  • Odpowiedz
@gabonczyk: Jeszcze CIę tutaj zawołam bo muszę przyznać, że szybko się nie zabiore za ogarnięcie tego przykłądowego pipeline (a przynajmniej nie przez następne 2 tygodnie) ale zagadałem do tego Leo na oficjalnym doscordzie ZIO.

Poniżej jego odpowiedź odnośnie performencu na IO więc trochę może dać to pogląd dlaczego ZIO na SParku może mieć sens.
Aczkolwiek martwi mnie, ze on takich benchmarków wcześniej nie zrobił xD
inny_89 - @gabonczyk: Jeszcze CIę tutaj zawołam bo muszę przyznać, że szybko się nie ...

źródło: comment_1636121185N4s0Pmud1Qz7b7i3UG7SnK.jpg

Pobierz
  • Odpowiedz
Słuchajcie mam zagadkę. Z zakresu troche fanaberii i sci-fi.

Raczej mniej istotne tło problemu:

Tworzę sobie Wheela w #pythonie i do pełnego wykorzystania tej libki, którą zbuduje jest potrzebna inna libka udostępniana jako plik .JAR.
Lokalnie jak sobie z tym pracuje i odpalam kod w ramach mojego develpmentu na sparku to mam zwyczajnie załączony ten JAR w odpowiedniej lokalizacji i wskazuje go podczas budowania SparkSession. Tak jak na uproszczonym przykłądzie poniżej:

spark
Kurcze mam dane 145 kolumn, 100k wierszy. Wrzucam do glue/sparka i mam kilkadziesiat krokow. W wiekszosci cos w stylu a*b itd (testuje sobie).
Większość kodu to funkcje np jak poniższa:

def handle(gc: GlueContext, df: DynamicFrame) -> DynamicFrame:
return ApplyMapping.apply(frame=df, mappings=t)

def t(rec: DynamicRecord) -> DynamicRecord:
rec['test'] = random.randint(0, 9)
return rec

No i wydajnosc tego to np 2-4 min na taki jeden krok - co mi sie wydaje dosyc dlugo.
Nagle przeprocesowanie
@inny_89: I chyba juz znalazłem winowajce.
Mam jedna regułe która ma policzyc srednia dla calego zbioru...
Wszystkie joby wcześniejsze są ładnie rozrzucone na executory.
Wszystkie joby po średniej - już idą na jednym executorze.

Dziwne, bo robie sobie kopie ramki, obliczam co mi trzeba i potem dodaje tylko kolumne do oryginalnej ramki. Ale zaraz sie upewnie wywalajac ten krok czy wszystko bedzie ladnie rownolegle dzialac.
  • Odpowiedz
@inny_89: Ok, to sobie rozpoznam - wygląda to na dosyć dużę czasy GC, jakby to zmniejszyć to też dobry kwałek ugram.

PS. Wielkie dzięki - wskazówki z dag (AWS ma to pod nazwą to Spark UI) były super pomocne. Tak to bym pewnie w ciemno błądził co jest nie tak. A tak w dzień rozpykane i teraz 100k wierszy robie w 8 min zamiast w 1h.
Problematyczne przekształcenia (średnia i join)
  • Odpowiedz
@inny_89: Z doświadczenia to całe zasilanie powinno się odbywać w dwóch krokach Source - Extract, Extract - Stage. Oczywiście mówię o hurtowni zasilanej raz na dobę nocną porą.

1. Source - Extract - truncate docelowych tabel i zasilenie ze źródła. Tak jest najszybciej. Nawet jak masz tabele do 100 mln rekordów. Z produkcji zasilamy dane tak szybko jak to jest możliwe.

2. Extract - Stage - zasilenie przyrostowe. I tu już
  • Odpowiedz
@inny_89: https://stackoverflow.com/questions/38487667/overwrite-specific-partitions-in-spark-dataframe-write-method

Ustawia się to jedną linijką w configu:

spark.conf.set("spark.sql.sources.partitionOverwriteMode","dynamic")
Wybacz też wysoki poziom abstrakcji przy opisywaniu założeń. :)


@inny_89: spoko, generalnie nie zajmuję się hurtowniami jako takimi i nie mam generalnie zbyt dużej wiedzy o pracy z nimi, za to coś tam technicznego ze sparka mogę pomóc ( ͡° ͜ʖ ͡°)
  • Odpowiedz
#spark #scala #programowanie

Nie działa mi 1 przykład z dokumentacji sparka: https://spark.apache.org/docs/latest/structured-streaming-kafka-integration.html

val df = spark
.readStream
.format("kafka")
.option("kafka.bootstrap.servers", "host1:port1,host2:port2")
.option("subscribe", "topic1")
.load()
df.selectExpr("CAST(key AS STRING)", "CAST(value AS STRING)")
.as[(String, String)]

podkreśla ostatnią linijkę "unable to find encoder (String, String)". An implicit encoder is needed to store (String, String) instances in Dataset
Tak to jest się uczyć z książki w której przykłady nie działają, bo są bez konfiguracji.
Próbuję zapodać przykładowy structured streaming sparkiem do kafki i same problemy. Większość już rozwiązałem, teraz mam na drodze ten:

org.apache.spark.AnalysisException: value attribute unsupported type bigint. value must be a(n) string or binary;
at org.apche.spark.sql.kafka010.KafkaWriter ...

kod:
val stream = spark.readStream.format("rate").option("rowsPerSecond" 1).load() // to streamuje liczby long co sekundę

val query = stream.writeStream.outputMode(OutputMode.Append()).format("kafka")
.option("kafka.bootstrap.servers", "localhost:9092").option("topic", "myTopic")
.option("checkpointLocation",
  • Odpowiedz
Najbardziej w #spark wkurza mnie to, że niestosuje się enumów w zapodawaniu opcji.
Weźmy teakie streamowanie:
spark.readStream.option(???, ...)

skąd mam wiedzieć jakie sa możliwe klucze dla option? Googluję i nie ma. Jest dokumentacja opisowa na wiele stron a prostej tabelki nie ma.
#programowanie