webentwicklung-frage-antwort-db.com.de

Wählen Sie Spalten im Pyspark Dataframe aus

Ich suche nach einer Möglichkeit, Spalten meines Datenrahmens im Pyspark auszuwählen. Für die erste Zeile weiß ich, dass ich df.first() verwenden kann, aber nicht sicher über Spalten, da sie keine Spaltennamen haben.

Ich habe 5 Spalten und möchte jede von ihnen durchlaufen.

+--+---+---+---+---+---+---+
|_1| _2| _3| _4| _5| _6| _7|
+--+---+---+---+---+---+---+
|1 |0.0|0.0|0.0|1.0|0.0|0.0|
|2 |1.0|0.0|0.0|0.0|0.0|0.0|
|3 |0.0|0.0|1.0|0.0|0.0|0.0|
9
Nivi

Versuchen Sie etwas so:

df.select([c for c in df.columns if c in ['_2','_4','_5']]).show()
20
MaxU

Erste zwei Spalten und fünf Reihen

 df.select(df.columns[:2]).take(5)
11
Michael West

Verwenden Sie df.schema.names

spark.version
# u'2.2.0'

df = spark.createDataFrame([("foo", 1), ("bar", 2)])
df.show()
# +---+---+ 
# | _1| _2|
# +---+---+
# |foo|  1| 
# |bar|  2|
# +---+---+

df.schema.names
# ['_1', '_2']

for i in df.schema.names:
  # df_new = df.withColumn(i, [do-something])
  print i
# _1
# _2
3
desertnaut

Zunächst wird Ihr Schema beim Importieren aus MySQL oder einer anderen Datenbank fehlerhaft erstellt 

cursor = conn.cursor(MySQLdb.cursors.DictCursor)
1
Shekhar Koirala

Der Datensatz in ss.csv Enthält einige Spalten, die mich interessieren:

ss_ = spark.read.csv("ss.csv", header= True, 
                      inferSchema = True)
ss_.columns
['Reporting Area', 'MMWR Year', 'MMWR Week', 'Salmonellosis (excluding Paratyphoid fever andTyphoid fever)†, Current week', 'Salmonellosis (excluding Paratyphoid fever andTyphoid fever)†, Current week, flag', 'Salmonellosis (excluding Paratyphoid fever andTyphoid fever)†, Previous 52 weeks Med', 'Salmonellosis (excluding Paratyphoid fever andTyphoid fever)†, Previous 52 weeks Med, flag', 'Salmonellosis (excluding Paratyphoid fever andTyphoid fever)†, Previous 52 weeks Max', 'Salmonellosis (excluding Paratyphoid fever andTyphoid fever)†, Previous 52 weeks Max, flag', 'Salmonellosis (excluding Paratyphoid fever andTyphoid fever)†, Cum 2018', 'Salmonellosis (excluding Paratyphoid fever andTyphoid fever)†, Cum 2018, flag', 'Salmonellosis (excluding Paratyphoid fever andTyphoid fever)†, Cum 2017', 'Salmonellosis (excluding Paratyphoid fever andTyphoid fever)†, Cum 2017, flag', 'Shiga toxin-producing Escherichia coli, Current week', 'Shiga toxin-producing Escherichia coli, Current week, flag', 'Shiga toxin-producing Escherichia coli, Previous 52 weeks Med', 'Shiga toxin-producing Escherichia coli, Previous 52 weeks Med, flag', 'Shiga toxin-producing Escherichia coli, Previous 52 weeks Max', 'Shiga toxin-producing Escherichia coli, Previous 52 weeks Max, flag', 'Shiga toxin-producing Escherichia coli, Cum 2018', 'Shiga toxin-producing Escherichia coli, Cum 2018, flag', 'Shiga toxin-producing Escherichia coli, Cum 2017', 'Shiga toxin-producing Escherichia coli, Cum 2017, flag', 'Shigellosis, Current week', 'Shigellosis, Current week, flag', 'Shigellosis, Previous 52 weeks Med', 'Shigellosis, Previous 52 weeks Med, flag', 'Shigellosis, Previous 52 weeks Max', 'Shigellosis, Previous 52 weeks Max, flag', 'Shigellosis, Cum 2018', 'Shigellosis, Cum 2018, flag', 'Shigellosis, Cum 2017', 'Shigellosis, Cum 2017, flag']

aber ich brauche nur ein paar:

columns_lambda = lambda k: k.endswith(', Current week') or k == 'Reporting Area' or k == 'MMWR Year' or  k == 'MMWR Week'

Der Filter liefert die Liste der gewünschten Spalten, die Liste wird ausgewertet:

sss = filter(columns_lambda, ss_.columns)
to_keep = list(sss)

die Liste der gewünschten Spalten wird als Argumente für die Datenrahmenauswahlfunktion entpackt, die ein Dataset zurückgibt, das nur die Spalten in der Liste enthält:

dfss = ss_.select(*to_keep)
dfss.columns

Das Ergebnis:

['Reporting Area',
 'MMWR Year',
 'MMWR Week',
 'Salmonellosis (excluding Paratyphoid fever andTyphoid fever)†, Current week',
 'Shiga toxin-producing Escherichia coli, Current week',
 'Shigellosis, Current week']

Die df.select() hat ein komplementäres Paar: http://spark.Apache.org/docs/2.4.1/api/python/pyspark.sql.html#pyspark.sql.DataFrame.drop

um die Liste der Spalten zu löschen.

1
borodark

Sie können ein Array verwenden und es in der folgenden Auswahl entpacken:

cols = ['_2','_4','_5']
df.select(*cols).show()
0
Shadowtrooper