3
votes

PySpark: lire plusieurs fichiers XML (liste des chemins s3) dans Spark dataframe

Comme la question le suggère, j'ai une liste de chemins s3 dans une liste

df = spark.read.format("com.databricks.spark.xml").option("rowTag", "head").load(s3_paths)

J'utilise PySpark et je veux savoir comment charger tous ces fichiers XML dans dataframe ensemble? Quelque chose de similaire à l'exemple ci-dessous.

s3_paths = ["s3a://somebucket/1/file1.xml", "s3a://somebucket/3/file2.xml"]

Je suis capable de lire un seul fichier, mais je souhaite trouver le meilleur moyen de charger tous les fichiers.


2 commentaires

Comment démarrer pyspark pour exécuter le code spark.read.format ?


concaténer tous les chemins de fichiers dans une chaîne délimitée par des virgules: df = spark.read....load(','.join(s3_paths))


3 Réponses :


0
votes

Déballez simplement la liste

s3_paths = ["s3a://somebucket/1/file1.xml", "s3a://somebucket/3/file2.xml"]

df = spark.read.format("com.databricks.spark.xml").option("rowTag", "head").load(*s3_paths)


1 commentaires

Je l'ai essayé - cela ne fonctionne pas. Exception: java.lang.ClassNotFoundException: impossible de trouver la source de données: s3a: //somebucket/3/file2.xml.



0
votes

vous pouvez vérifier le dépôt GitHub suivant.


0 commentaires

1
votes

La réponse de @ jxc dans les commentaires à la question est la meilleure solution:

fnames = ['books_part1.xml','books_part2.xml'] # part1 -> ids bk101-bk106, part2 -> ids bk107-bk112

df = spark.read.format('xml') \
              .option('rowTag','book')\
              .load(','.join(fnames))

df.show()

# +-----+--------------------+--------------------+---------------+-----+------------+--------------------+
# |  _id|              author|         description|          genre|price|publish_date|               title|
# +-----+--------------------+--------------------+---------------+-----+------------+--------------------+
# |bk101|Gambardella, Matthew|An in-depth look ...|       Computer|44.95|  2000-10-01|XML Developer's G...|
# |bk102|          Ralls, Kim|A former architec...|        Fantasy| 5.95|  2000-12-16|       Midnight Rain|
# |bk103|         Corets, Eva|After the collaps...|        Fantasy| 5.95|  2000-11-17|     Maeve Ascendant|
# |bk104|         Corets, Eva|In post-apocalyps...|        Fantasy| 5.95|  2001-03-10|     Oberon's Legacy|
# |bk105|         Corets, Eva|The two daughters...|        Fantasy| 5.95|  2001-09-10|  The Sundered Grail|
# |bk106|    Randall, Cynthia|When Carla meets ...|        Romance| 4.95|  2000-09-02|         Lover Birds|
# |bk107|      Thurman, Paula|A deep sea diver ...|        Romance| 4.95|  2000-11-02|       Splish Splash|
# |bk108|       Knorr, Stefan|An anthology of h...|         Horror| 4.95|  2000-12-06|     Creepy Crawlies|
# |bk109|        Kress, Peter|After an inadvert...|Science Fiction| 6.95|  2000-11-02|        Paradox Lost|
# |bk110|        O'Brien, Tim|Microsoft's .NET ...|       Computer|36.95|  2000-12-09|Microsoft .NET: T...|
# |bk111|        O'Brien, Tim|The Microsoft MSX...|       Computer|36.95|  2000-12-01|MSXML3: A Compreh...|
# |bk112|         Galos, Mike|Microsoft Visual ...|       Computer|49.95|  2001-04-16|Visual Studio 7: ...|
# +-----+--------------------+--------------------+---------------+-----+------------+--------------------+

Voici un exemple utilisant un jeu de données de jouet:

df = spark.read.format("com.databricks.spark.xml")\
               .option("rowTag", "head")\
               .load(','.join(s3_paths))


0 commentaires