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.
3 Réponses :
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)
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.
vous pouvez vérifier le dépôt GitHub suivant.
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))
Comment démarrer
pyspark
pour exécuter le codespark.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))