使用Clojure/Java从s3读取流
我有一个s3上的大文件,我希望在下载时对其进行解码和解析。我碰巧正在使用clojure,但任何库都可以 我可以很容易地得到一条流:使用Clojure/Java从s3读取流,java,amazon-s3,clojure,Java,Amazon S3,Clojure,我有一个s3上的大文件,我希望在下载时对其进行解码和解析。我碰巧正在使用clojure,但任何库都可以 我可以很容易地得到一条流: (def stream (-> (get-object "some-s3-bucket" "some-object-key") :input-stream)) ; returns: #<S3ObjectInputStream com.amazonaws.services.s3.model.S3ObjectInputStream (定义流(->(获取对
(def stream (-> (get-object "some-s3-bucket" "some-object-key") :input-stream))
; returns: #<S3ObjectInputStream com.amazonaws.services.s3.model.S3ObjectInputStream
(定义流(->(获取对象“some-s3-bucket”“some-object key”):输入流)
; 返回:#由于恰好扩展了java.io.InputStream
,因此您可以:
使用函数在其上获取一个BufferedReader
以Clojure允许的任何方式从读卡器读取数据。
- 用于从
BufferedReader
获取延迟行序列。如果这对您的JSON有意义的话。可能不会
- 使用惰性JSON解析器,例如。这个特殊的程序甚至可以处理一个裸流,因此可以安全地跳过步骤(1)
如果这对任何人都有帮助的话,这就是我在D-Side的帮助回答之后想到的
(ns some-project.get-s3-stream
(:require [aws.sdk.s3 :as s3])
(:require [clojure.java.io :as io])
(:use [amazonica.aws.s3])
(:import [java.util.zip GZIPInputStream]))
(def bucket "some-s3-bucket")
(def object-key "some-object-key")
(def seq-of-json-lines
(->
(get-object bucket object-key)
:object-content
(java.util.zip.GZIPInputStream.)
io/reader
line-seq))