2017-07-06 7 views
0

ファイルを読み込んでs3パスの間に値を代入する必要があります。ファイルをループすることはできますが、値を代入することはできません。pyspark - ファイルを反復してデータフレームの値を代入する

File ending with \n 
/MTD_avg_cust_bal1 
/MTDSumOfCustomerInitiatedTrxns1 
/MTDCountOfCustomerInitiatedTrxns1 

コード:

metrics = open("Output.txt","r") 
line = metrics.readline() 

while line: 
    print line 
    line = metrics.readline() 
    s3path = ("SELECT * FROM parquet.`s3n://bucket{}/loaddate=20170406/part-r-00000-d60b633d-ff49-4515-8cff-ace9faf1b267.csv`") .format(line).strip('\n') 

    print s3path 
    df1 = sqlContext.sql(s3path) 

エラー:

pyspark.sql.utils.AnalysisException: u'Path does not exist: s3n://omniscience1/MTDSumOfCustomerInitiatedTrxns1\n/loaddate=20170406/part-r-00000-d60b633d-ff49-4515-8cff-ace9faf1b267.csv;; line 1 pos 14' 
値が代入され、また、私はのための独立したデータフレームを持っている必要がある場合、問題は、それが \nを含めていますされ

各行。

答えて

1

出力がどのように表示されるか教えてください。

私はPythonのエキスパートではありません。しかし、以下は私の理解に基づいて私が思いついたものです。これがあなたが探しているものなら教えてください。

with open("Output.txt", 'r') as file: 

    for line in file: 
     line = line.strip('\n') 
     s3path = ("SELECT * FROM parquet.`s3n://bucket{}/loaddate=20170406/part-r-00000-d60b633d-ff49-4515-8cff-ace9faf1b267.csv`") .format(line) 

     print (s3path) 

上記のスクリプトの出力は以下のとおりです。

SELECT * FROM parquet.`s3n://bucket/MTD_avg_cust_bal1/loaddate=20170406/part-r-00000-d60b633d-ff49-4515-8cff-ace9faf1b267.csv` 
SELECT * FROM parquet.`s3n://bucket/MTDSumOfCustomerInitiatedTrxns1/loaddate=20170406/part-r-00000-d60b633d-ff49-4515-8cff-ace9faf1b267.csv` 
SELECT * FROM parquet.`s3n://bucket/MTDCountOfCustomerInitiatedTrxns1/loaddate=20170406/part-r-00000-d60b633d-ff49-4515-8cff-ace9faf1b267.csv` 
+0

はい、それはparquet.'s3n FROM DF1 = SELECT *のようにする必要があります://バケット/ MTD_avg_cust_bal1/loaddate = 20170406 /パート-R-00000-d60b633d-ff49-4515-8cff-ace9faf1b267.csv' – Shrikant

+0

データフレーム名(df1、df2など)をオンザフライで生成する予定ですか?もしそうなら、これをやっている理由をもう少し知ることができますか? –

+0

Rajuの入力に感謝、私はファイルを読むことができるが、そのファイルの最後の行だけを読む。はい、その場でデータフレームを作成し、 – Shrikant

関連する問題