Spark DataFrames avec Parquet et partitionnement

Je n'ai pas été en mesure de trouver beaucoup d'informations sur ce sujet, mais disons que nous utilisons une base de données pour lire dans un fichier de parquet qui est 10 blocs étincelle va naturellement créer 10 partitions. Mais quand le dataframe lit dans le fichier pour le traiter, ne sera-t-il pas en train de traiter un grand ratio données / partition parce que s'il traitait le fichier non compressé, la taille du bloc aurait été beaucoup plus grande, ce qui signifie que les partitions auraient été plus grandes aussi.

alors laissez-moi clarifier, parquet comprimé (ces chiffres ne sont pas tout à fait exact). 1 Go Par = 5 blocs = 5 Partitions qui peuvent être décompressées à 5 Go ce qui fait 25 blocs/25 partitions. Mais si vous ne répartissez pas le fichier par de 1 Go, vous serez coincé avec seulement 5 partitions alors qu'il serait optimalement 25 partitions? Ou est ma logique de mal.

aurait du sens de repartition pour augmenter la vitesse? Ou est-ce que j'y pense mal. Quelqu'un peut-il éclairer sur ce point?

Hypothèses:

  • 1 Bloc = 1 Cloison Pour Étincelle
  • 1 Coeur actionné sur 1 cloison
6
demandé sur theMadKing 2015-09-15 17:29:54

2 réponses

Spark DataFrame ne charge pas les fichiers de parquet en mémoire. Il utilise L'API Hadoop/HDFS pour le lire pendant chaque opération. Ainsi, le nombre optimal de cloisons dépend de la taille du bloc HDFS (différente de la taille d'un bloc de Parquet!).

Spark 1.5 partitions DataFrame parquet file as follows:

  • 1 partition par bloc HDFS
  • si la taille du bloc HDFS est inférieure à celle configurée dans la taille du bloc Spark parquet, une partition sera créé pour plusieurs blocs HDFS tels que la taille totale de la partition est pas moins que la taille du bloc de parquet
5
répondu kostya 2015-10-02 04:24:33

j'ai vu l'autre réponse, mais je pensais que je puisse préciser davantage. Si vous lisez le Parquet du système de fichiers posix, vous pouvez augmenter le nombre de lectures de partitionnement en ayant simplement plus d'ouvriers dans Spark.

mais pour contrôler l'équilibre des données qui vient dans les ouvriers on peut utiliser la structure hiérarchique des données des dossiers de Parquet, et plus tard dans les ouvriers vous pouvez pointer vers différentes partitions ou parties du dossier de Parquet. Cela vous donnera le contrôle de la quantité de données doit aller à chaque travailleur selon le domaine de votre ensemble de données (si en équilibrant les données dans les travailleurs vous voulez dire lot égal de données par travailleur n'est pas efficace).

0
répondu M.Rez 2016-06-14 07:57:37