Comment faire de la première ligne comme en-tête lors de la lecture d'un fichier dans PySpark et de la convertir vers les Pandas Dataframe
Je suis à la lecture d'un fichier dans PySpark
et formant la rdd
. Je puis convertir normal dataframe
puis à pandas dataframe
. Le problème que je rencontre est qu'il y a en-tête de ligne dans mon fichier d'entrée, et je veux faire ce que l'en-tête de dataframe colonnes, mais elles sont lus dans une rangée supplémentaire et non comme en-tête. Voici mon code actuel:
def extract(line):
return line
input_file = sc.textFile('file1.txt').zipWithIndex().filter(lambda (line,rownum): rownum>=0).map(lambda (line, rownum): line)
input_data = (input_file
.map(lambda line: line.split(";"))
.filter(lambda line: len(line) >=0 )
.map(extract)) # Map to tuples
df_normal = input_data.toDF()
df= df_normal.toPandas()
Maintenant quand je regarde les df
puis la ligne d'en-tête de fichier texte devient la première ligne de dataframe
et il y a en-tête supplémentaire dans df
avec 0,1,2...
comme en-tête. Comment puis-je faire la première ligne comme en-tête?
sans un échantillon de la dataframe de travailler avec, je pense que vous pouvez simplement utiliser
Pourquoi utiliser Étincelle à tous ici? Si l'on suppose que les données s'inscrit (en ignorant les lignes vides) sur une machine locale, il est juste un gaspillage de temps et de ressources.
df_normal.toPandas('header'=1)
. Ou quelle que soit la ligne qui contient l'en-tête que vous voulezPourquoi utiliser Étincelle à tous ici? Si l'on suppose que les données s'inscrit (en ignorant les lignes vides) sur une machine locale, il est juste un gaspillage de temps et de ressources.
OriginalL'auteur user2966197 | 2016-01-16
Vous devez vous connecter pour publier un commentaire.
Il ya un couple de façons de le faire, en fonction de la structure exacte de vos données. Puisque vous ne lui donnez pas de détails, je vais essayer de le montrer à l'aide d'un fichier de données
nyctaxicab.csv
que vous pouvez télécharger.Si votre fichier est en
csv
format, vous devez utiliser lespark-csv
paquet, fournis par Databricks. Pas besoin de télécharger de façon explicite, il suffit d'exécuterpyspark
comme suit:et puis
Le fichier de 250 000 lignes, y compris l'en-tête, de sorte à 249 999 est le nombre exact d'enregistrements réels. Voici le schéma, tel que déduit automatiquement par le paquet:
Vous pouvez voir plus de détails dans mon blog post.
Si, pour quelque raison que ce soit, vous ne pouvez pas utiliser le
spark-csv
package, vous devez soustraire la première ligne de données, puis de les utiliser pour construire votre schéma. Voici l'idée générale, et de nouveau, on peut trouver un exemple complet avec les détails du code dans un autre post de blog de la mine:Pour des raisons de concision, ici, toutes les colonnes finissent par être de type
string
, mais dans le post de blog je montre en détail et expliquer comment vous pouvez affiner souhaité types de données (et noms) pour des domaines spécifiques.OriginalL'auteur desertnaut
La réponse la plus simple serait de définir
header='true'
Par exemple:
ou
header=True
OriginalL'auteur naren