Mam pytanie uzupełniające do mojego wczorajszego pytania o sortowanie.
Dataframy mi się sortują ładnie. Teraz pytanie - czy taki posortowany dataframe mogę zapisać jako posortowany parquet?
Bo zwykłe zapisane posortowanego df niestety nie daje oczekiwanego rezultatu i parquet (a potem external table z tego parqueta) nie są posortowane po tej kolumnie co dataframe.

Pewnie jest opcja, że się nie da, bo tabela to logiczne dane, a nie posortowany zestaw danych?


#pyspark #
@LucaJune Z tego co wiem to nie da się osiągnąć sortowania w parquet, ze względu na sposób w jaki zapisuje on dane (kolumny). Z reguly sortowanie musi odbyć się jeszcze raz po wczytaniu.

Jeśli twój DF jest dość mały, możesz spróbować zapisania go jako jedna partycja (df.coalesce(1)), wtedy sortowanie powinno być zachowane, ale tracisz obliczenia na wielu klastrach.
Mam w Synapsie Analytics dataframe złożony z joinów z 10 innych dataframów, nic przesadnie skomplikowanego.
Ale chcę to posortować i .orderBy(col("nazwakolumny").desc()) mi nie działa.

Jako ciekawostka - w jednym notebooku mi to ładnie działa, a w innym nie.

Nie wywala błędu, tylko po prostu nie sortuje.

Jakieś pomysły? Nie mam jakichś funkcji dociągniętych czy co?

#pyspark #synapse #bigdata #python
Cześć,

Czy ktoś z was miał okazję pracować z technologią hadoop w kontekście zadań związanych z tematyką Machine Learning ? jeśli tak to jak wyglądał proces tworzenia modeli, obróbki danych od początku rozpoczęcia ciągu technicznego ?

Jak rozumiem Hadoop to jest jakby to powiedzieć ogromny magazyn na przechowywanie dosłownie różnych danych z różnych systemów dane te mogą być ustrukturyzowane, nieustrukturyzowane itp. wchodzą oni to jak dobrze rozumiem przestrzeni HDFS na surowo, i
#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}"
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
@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ż
@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 ( ͡° ͜ʖ ͡°)