[英]read stream from s3 with Clojure/Java
我在s3上有一个大文件,我希望在下载时解码和解析。 我碰巧使用了clojure Amazonica库 ,但任何库都可以。
我可以轻松获得一个流:
(def stream (-> (get-object "some-s3-bucket" "some-object-key") :input-stream))
; returns: #<S3ObjectInputStream com.amazonaws.services.s3.model.S3ObjectInputStream
但是如何阅读流? 我可以一次读一行(解压缩的内容是JSON行)吗?
(如果我的问题有任何歧义,我只关心流的读取,而不是gzip解码的任何部分)
如果它对任何人都有帮助,那么这就是我在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))
由于S3ObjectInputStream
碰巧扩展了java.io.InputStream
,您可以:
reader
函数在其上获取BufferedReader
。 line-seq
从BufferedReader
获取延迟的行序列。 如果这对你的JSON有意义。 它可能不会。 clj-lazy-json
。 这个特殊的甚至可以处理裸流,因此可以安全地跳过步骤(1)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.