Je suis nouveau sur Spark et je ne le trouve pas ... J'ai beaucoup de fichiers de parquet téléchargés dans s3
à l'emplacement:
s3://a-dps/d-l/sco/alpha/20160930/parquet/
La taille totale de ce dossier est 20+ Gb
,. Comment segmenter et lire ceci dans une trame de données Comment charger tous ces fichiers dans une trame de données?
La mémoire allouée à spark est de 6 Go.
from pyspark import SparkContext
from pyspark.sql import SQLContext
from pyspark import SparkConf
from pyspark.sql import SparkSession
import pandas
# SparkConf().set("spark.jars.packages","org.Apache.hadoop:hadoop-aws:3.0.0-alpha3")
sc = SparkContext.getOrCreate()
sc._jsc.hadoopConfiguration().set("fs.s3.awsAccessKeyId", 'A')
sc._jsc.hadoopConfiguration().set("fs.s3.awsSecretAccessKey", 's')
sqlContext = SQLContext(sc)
df2 = sqlContext.read.parquet("s3://sm/data/scor/alpha/2016/parquet/*")
Erreur :
Py4JJavaError: Une erreur s'est produite lors de l'appel de o33.parquet. : Java.io.IOException: aucun système de fichiers pour le schéma: s3 Sur org.Apache.hadoop .fs.FileSystem.getFileSystemClass (FileSystem.Java:2660) sur org.Apache.hadoop.fs.FileSystem.createFileSystem (FileSystem.Java:2667) sur org.Apache.hadoop.fs .FileSystem.access 200 $ (FileSystem.Java:94) Chez org.Apache.hadoop.fs.FileSystem $ Cache.getInternal (FileSystem.Java:2703) Chez org.Apache.hadoop. fs.FileSystem $ Cache.get (FileSystem.Java:2685) sur org.Apache.hadoop.fs.FileSystem.get (FileSystem.Java:373) sur org.Apache.hadoop. fs.Path.getFileSystem (Path.Java:295) at org.Apache.spark.sql.execution.datasources.DataSource $$ anonfun $ 14.apply (DataSource.scala: 372) at org.Apache.spark.sql.execution.datasources.DataSource $$ anonfun $ 14.apply (DataSource.scala: 370) at scala.collection.TraversableLike $$ anonfun $ flatMap $ 1.apply (TraversableLike.scala: 241) at scala.collection.TraversableLike $$ anonfun $ flatMap $ 1.apply (TraversableLike.scala: 241) at scala.collection.immutable .List.foreach (List.scala: 381) Sur scala.collection.TraversableLike $ class.flatMap (TraversableLike.scala: 241) Sur scala.collection.immutable.List.flatMap (List .scala: 344)
Le schéma de fichier (s3
) que vous utilisez n'est pas correct. Vous devrez utiliser le s3n
schéma ou s3a
(pour les objets s3 plus gros):
// use sqlContext instead for spark <2
val df = spark.read
.load("s3n://bucket-name/object-path")
Je vous suggère d'en savoir plus sur le module Hadoop-AWS: intégration avec Amazon Web Services Overview .
Vous devez utiliser SparkSession au lieu de sqlContext depuis Spark 2.0
spark = SparkSession.builder
.master("local")
.appName("app name")
.config("spark.some.config.option", true).getOrCreate()
df = spark.read.parquet("s3://path/to/parquet/file.parquet")