1. ホーム
  2. python

[解決済み] S3からspark dataframe Pythonにparquetデータを読み込むには?

2022-02-07 19:30:31

質問

私はSparkの初心者ですが、これを見つけることができません...。私は、多くのparquetファイルを s3 の場所にある。

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

このフォルダの総サイズは 20+ Gb ,. これをチャンクしてデータフレームに読み込む方法 これらのファイルをすべてdataframeに読み込むにはどうしたらよいでしょうか?

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

    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の呼び出し中にエラーが発生しました。
    : java.io.IOException。スキーム: s3 に対応する FileSystem がありません
        at org.apache.hadoop.fs.FileSystem.getFileSystemClass(FileSystem.java:2660)
        at org.apache.hadoop.fs.FileSystem.createFileSystem(FileSystem.java:2667)
        at org.apache.hadoop.fs.FileSystem.access$200(FileSystem.java:94)
        at org.apache.hadoop.fs.FileSystem$Cache.getInternal(FileSystem.java:2703)
        at org.apache.hadoop.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)
        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)
        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)

 

解決するには?

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

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

について詳しく読むことをお勧めします。 Hadoop-AWSモジュール。Amazon Web Services との統合の概要 .