La plupart des questions sur spark sont utilisées show
comme exemple de code sans le code qui génère le dataframe, comme ceci:
df.show() +-------+--------+----------+ |USER_ID|location| timestamp| +-------+--------+----------+ | 1| 1001|1265397099| | 1| 6022|1275846679| | 1| 1041|1265368299| +-------+--------+----------+
Comment puis-je reproduire ce code dans mon environnement de programmation sans le réécrire manuellement? pyspark a un équivalent de read_clipboard
dans les pandas?
L'absence de fonction pour importer des données dans mon environnement est un gros obstacle pour moi pour aider les autres avec pyspark dans Stackoverflow.
Donc, ma question est:
Quel est le moyen le plus pratique de reproduire des données collées dans stackoverflow à partir de afficher la commande
dans mon environnement?
4 Réponses :
Vous pouvez toujours lire les données des pandas en tant que dataframe pandas, puis les reconvertir en dataframe spark. Non, il n'y a pas d'équivalent direct de read_clipboard dans pyspark contrairement aux pandas.
La raison en est que les dataframes Pandas sont pour la plupart des structures plates où, comme les dataframes spark peuvent avoir des structures complexes comme des struct, des tableaux, etc., puisqu'elles ont une grande variété de types de données et que ceux-ci n'apparaissent pas sur la sortie de la console, ce n'est pas possible pour recréer la trame de données à partir de la sortie.
il est possible de lire mon exemple de code dans les pandas? pouvez-vous me montrer comment?
Vous pouvez combiner panda read_clipboard et convertir en pyspark dataframe
def parse(ascii_table): header = [] data = [] for line in filter(None, ascii_table.split('\n')): if '-+-' in line: continue if not header: header = filter(lambda x: x!='|', line.split()) continue data.append(['']*len(header)) splitted_line = filter(lambda x: x!='|', line.split()) for i in range(len(splitted_line)): data[-1][i]=splitted_line[i] return header, data
Mise à jour:
Ce que @terry veut vraiment, c'est copier du code ASCII table en python, et ce qui suit est exemple. Lorsque vous analysez des données en python, vous pouvez les convertir en n'importe quoi.
from pyspark.sql.types import * pdDF = pd.read_clipboard(sep=',', index_col=0, names=['USER_ID', 'location', 'timestamp', ]) mySchema = StructType([ StructField("USER_ID", StringType(), True)\ ,StructField("location", LongType(), True)\ ,StructField("timestamp", LongType(), True)]) #note: True (implies nullable allowed) df = spark.createDataFrame(pdDF,schema=mySchema)
Que doit être ascii_table
?
Vous pouvez toujours utiliser la fonction suivante:
from pyspark.sql.functions import * def read_spark_output(file_path): step1 = spark.read \ .option("header","true") \ .option("inferSchema","true") \ .option("delimiter","|") \ .option("parserLib","UNIVOCITY") \ .option("ignoreLeadingWhiteSpace","true") \ .option("ignoreTrailingWhiteSpace","true") \ .option("comment","+") \ .csv("file://{}".format(file_path)) # select not-null columns step2 = t.select([c for c in t.columns if not c.startswith("_")]) # deal with 'null' string in column return step2.select(*[when(~col(col_name).eqNullSafe("null"), col(col_name)).alias(col_name) for col_name in step2.columns])
C'est l'une des suggestions données dans la question suivante: Comment créer de bons exemples Apache Spark reproductibles .
Remarque 1: Parfois, il peut y avoir des cas particuliers où cela peut ne pas s'appliquer pour une raison ou une autre et qui peut générer des erreurs / problèmes, c'est-à-dire Regrouper par colonne" grp "et compresser DataFrame - (prendre le dernier non nul valeur pour chaque colonne triée par colonne "ord") . Veuillez donc l'utiliser avec prudence!
Note 2: (Clause de non-responsabilité) Je ne suis pas l'auteur original du code. Merci à @MaxU pour le code. Je viens d'y apporter quelques modifications.
Qu'est-ce que file_path
ici?
Réponse tardive, mais je suis souvent confronté au même problème, alors j'ai écrit un petit utilitaire pour ce https: // github.com/ollik1/spark-clipboard
Il permet essentiellement de copier-coller des chaînes de show frame de données pour déclencher. Pour l'installer, ajoutez la dépendance jcenter com.github.ollik1: spark-clipboard_2.12: 0.1
et spark config .config ("fs.clipboard.impl", "com.github.ollik1 .clipboard.ClipboardFileSystem ")
Après cela, les blocs de données peuvent être lus directement à partir du presse-papiers du système
val df = spark.read .format("com.github.ollik1.clipboard") .load("clipboard:///*")
ou des fichiers si vous préférez. Les détails de l'installation et l'utilisation sont décrits dans le fichier Lisez-moi.
C'est avancé! :)
Est-ce ce que vous voulez convertir panda en dataframe? stackoverflow.com/questions/37513355 /…
@howie Cela peut faire partie de la réponse si quelqu'un répond d'abord comment convertir mon exemple de code pyspark en pandas.
Que voulez-vous dire convertir mon exemple de code pyspark en pandas? Vous ne savez pas comment créer le dataframe de panda?
@howie the ideia explique comment reproduire des exemples de données pyspark à partir d'autres questions. Si vous devez importer mes exemples de données pour m'aider, que feriez-vous?
Je vais créer manuellement un dataframe pyspark à partir de vos exemples de données ~ :)
Je pense que vous avez besoin d'un analyseur de table de texte ASCII?