0
votes

Analysant les lignes et isolant les archives d'étudiants de Spark Dataframe

Ma base de données d'étudiants a plusieurs enregistrements pour chaque élève de l'étudiant de la table.

Je lisez les données dans une source de données Spark, puis itérale à travers une source de données d'étincelle, isolez des enregistrements pour chaque élève et faites un certain traitement pour chaque dossier de l'étudiant. . P>

Mon code jusqu'à présent: P>

from pyspark.sql import SparkSession
spark_session = SparkSession \
    .builder \
    .appName("app") \
    .config("spark.jars.packages", "org.apache.hadoop:hadoop-aws:2.7.2") \
    .getOrCreate()

class_3A = spark_session.sql("SQL") 

for row in class_3A:
    #for each student
        #Print Name, Age and Subject Marks


2 commentaires

Avez-vous encore essayé quelque chose? Il serait utile de donner plus de contexte à ce que vous essayez d'accomplir. "Isoler" et "processus" est assez vague.


Merci tout le monde. Je pense que je voulais avoir la flexibilité du cadre de données Pandas afin que j'ai convertit la structure de données d'étincelle en une trame de données Pandas.


4 Réponses :


0
votes

Vous pouvez faire boucler chaque enregistrement dans un fichier de données et y accéder avec les noms de colonne

+---+--------+
|age|name    |
+---+--------+
|25 |Ankit   |
|22 |Jalfaizy|
|20 |Suresh  |
|26 |Bala    |
+---+--------+

Hi Ankit your age is : 25
Hi Jalfaizy your age is : 22
Hi Suresh your age is : 20
Hi Bala your age is : 26


1 commentaires

Pas le moyen le plus efficace d'utiliser une étincelle. Vous téléchargez des données sur un fichier de données uniquement pour le collecter et traiter avec la boucle Python? Cela n'a aucun sens.



2
votes

Une autre approche serait d'utiliser SparkSQL

>>> df = spark.createDataFrame([('Ankit',25),('Jalfaizy',22),('Suresh',20),('Bala',26)],['name','age'])
>>> df.show()
+--------+---+                                                                  
|    name|age|
+--------+---+
|   Ankit| 25|
|Jalfaizy| 22|
|  Suresh| 20|
|    Bala| 26|
+--------+---+

>>> df.where('age > 20').show()
+--------+---+
|    name|age|
+--------+---+
|   Ankit| 25|
|Jalfaizy| 22|
|    Bala| 26|
+--------+---+

>>> from pyspark.sql.functions import *
>>> df.select('name', col('age') + 100).show()
+--------+-----------+
|    name|(age + 100)|
+--------+-----------+
|   Ankit|        125|
|Jalfaizy|        122|
|  Suresh|        120|
|    Bala|        126|
+--------+-----------+


0 commentaires

1
votes

Approche impérative (en plus de l'approche SQL de Bala):

class_3A = spark_session.sql("SQL") 

def process_student(student_row):
    # Do Something with student_row
    return processed_student_row

#"isolate records for each student"
# Each student record will be passed to process_student function for processing.
# Results will be accumulated to a new DF - result_df
result_df = class_3A.map(process_student)

# If you don't care about results and just want to do some processing:
class_3A.foreach(process_student)


0 commentaires

0
votes

Je ne sais pas si je comprends la question de la question, mais si vous voulez faire l'opération sur Des lignes basées sur n'importe quelle colonne que vous pouvez le faire en utilisant des fonctions de Dataframe. Exemple: xxx

échantillon de données

étudiant_id, sujet, marques 1, maths, 3 1, Science, 6 2, maths, 4 2, science, 7

sortie

+ ---------- + ------- + ----- + | Student_id | Sujet | Marks | + ----------- + ------- + ----- + | 1 | Maths | 3 | | 1 | Science | 6 | | 2 | Maths | 4 | | 2 | Science | 7 | + ---------- + ------- + ----- +

+ ---------- + ----- - + ------ + ------------------- + + | Student_ID | Sujet | Marks | Max_Marks_inaNysub | + ----------- + ------- + ----- + ------------------- + + + | 1 | Science | 6 | 6 | | 2 | Science | 7 | 7 | + ---------- + ------- + ----- + ------------------- + < / p>


0 commentaires