2017-07-17 6 views
0

私は、ディレクトリ内のs3上のいくつかのタブ区切りデータを持っていますs3://mybucket/my/directory/pysparkのs3の表形式データを読むには?

さて、私はこのようなだけファイルに読み取るために区切り文字として\tを使用したいpyspark言っています:

from pyspark import SparkContext 

from pyspark.sql import HiveContext, SQLContext, Row 
from pyspark.sql.types import * 
from datetime import datetime 
from pyspark.sql.functions import col, date_sub, log, mean, to_date, udf, unix_timestamp 
from pyspark.sql.window import Window 
from pyspark.sql import DataFrame 

sc =SparkContext() 
sc.setLogLevel("DEBUG") 
sqlContext = SQLContext(sc) 
indata_creds = sqlContext.read.load('s3://mybucket/my/directory/onefile.txt').option("delimiter", "\t") 

をしかし、私に言っている:assertion failed: No predefined schema found, and no Parquet data files or summary files found under s3://mybucket/my/directory/onefile.txt

行う方法私はこれがタブ区切りのファイルであり、寄木細工ファイルではないことをpysparkに伝えますか?

または、ディレクトリ全体でこれらのファイルを一度に簡単に読み取る方法はありますか?

ありがとうございました。

  • EDIT:

    indata_creds = sqlContext.read.text('s3://mybucket/my/directory/') 
    

    私がしようとするので、私はファイルがS3上にあるので、私はいつものを使用することはできませんよpysparkバージョン1.6.1 *

を使用していますそれは、私が得るjava.io.IOException: No input paths specified in job

それ以外は何を試すことができますか?

答えて

0

実際の問題は、自分のAWSキーをspark-env.shファイルに追加する必要があることでした。

1

あなたがApacheのスパーク1.6.1を使用しているので、あなたはこのコードを使用するspark-csvが必要:

indata_creds = sqlContext.read.format('com.databricks.spark.csv').option('delimiter', '\t').load('s3://mybucket/my/directory/onefile.txt') 

動作する必要があることを!

もう1つのオプションは、たとえばanswerです。これをコンマで分割する代わりに、タブで分割することができます。そして、RDDをデータフレームにロードします。しかし、最初のオプションは簡単で、すでにデータフレームにロードされています。

あなたのコメントの代わりに、私はそれを寄木細工のファイルに変換しません。あなたのデータが本当に巨大であり、圧縮が必要な場合を除いて、その必要はありません。

コメントの2番目の質問については、はい、ディレクトリ全体を読むことができます。 Sparkはregex/globをサポートしています。だからこのようなことをすることができます:

indata_creds = sqlContext.read.format('com.databricks.spark.csv').option('delimiter', '\t').load('s3://mybucket/my/directory/*.txt') 

ところで、なぜあなたは2.x.xを使用していませんか?それはawsでも利用可能です。

+0

申し訳ありませんが、動作しません。まず、 'AttributeError: 'DataFrameReader'オブジェクトに上記のコードで 'csv'属性がありません。そして、私が '' indata_creds = spark_session.read.option( 'sep'、 '\ t').load( 's3://mybucket/my/directory/onefile.txt')を実行しようとすると、同じエラーが出ます私は寄木張りのファイルについて投稿しました。 – Sother

+0

他の選択肢があります:1)これらのテキストファイルをすべてs3上のいくつかの寄木細工ファイルに圧縮する方法はありますか? 2)ディレクトリ全体を一度に読む方法はありますか? – Sother

+1

私の編集を参照してください... –

関連する問題