web-dev-qa-db-ja.com

S3からspark dataframe Python?に寄木細工のデータを読み込む方法

Sparkが初めてで、これを見つけることができません... s3場所:

s3://a-dps/d-l/sco/alpha/20160930/parquet/

このフォルダーの合計サイズは20+ Gb 、。これをデータフレームにチャンクして読み込む方法これらすべてのファイルをデータフレームに読み込む方法は?

sparkクラスターに割り当てられたメモリは6 GBです。

    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/*")

エラー:

 
 Py4JJavaError:o33.parquet。
の呼び出し中にエラーが発生しました。 .fs.FileSystem.getFileSystemClass(FileSystem.Java:2660)
 at org.Apache.hadoop.fs.FileSystem.createFileSystem(FileSystem.Java:2667)
 at org.Apache.hadoop.fs .org.Apache.hadoop.fs.FileSystem $ Cache.getInternal(FileSystem.Java:2703)
 at org.Apache.hadoopの.FileSystem.access $ 200(FileSystem.Java:94)
 fs.FileSystem $ Cache.get(FileSystem.Java:2685)
 at org.Apache.hadoop.fs.FileSystem.get(FileSystem.Java:373)
 at org.Apache.hadoop fs.Path.getFileSystem(Path.Java:295)
 org.Apache.spark.sql.execution.datasources.DataSource $$ anonfun $ 14.apply(DataSource.scala:372)
でorg.Apache.spark.sql.execution.datasources.DataSource $$ anonfun $ 14.apply(DataSource.scala:370)
 at scala.collection.TraversableLike $$ anonfun $ flatMap $ 1.apply(TraversableLike.scala:241)
 scala.collection.TraversableLike $$ anonfun $ flatMap $ 1.apply(TraversableLike.scala:241)
 at scala.collection.immutable .List.foreach(List.scala:381)
 at scala.collection.TraversableLike $ class.flatMap(TraversableLike.scala:241)
 at scala.collection.immutable.List.flatMap(List .scala:344)
 
 
10
Viv

使用しているファイルスキーマ(s3)が正しくありません。 s3nスキーマまたはs3a(より大きなs3オブジェクトの場合)を使用する必要があります。

// use sqlContext instead for spark <2 
val df = spark.read 
              .load("s3n://bucket-name/object-path")

Hadoop-AWSモジュール:アマゾンウェブサービスとの統合の概要 について詳しく読むことをお勧めします。

15
eliasah

Spark 2.0なので、sqlContextではなくSparkSessionを使用する必要があります

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")
12
Artem Ignatiev