2016-03-24 4 views
0

をロードする前に、私は強いリアルサーバマシンに効率的にロードする多くの大規模なJSONファイル(3Gそれぞれを)持っている、しかし、すべてのファイルからすべてのレコードをロードすると冗長と排出されます(50Mレコードは40を掛けます) 。だから私はそれが効率的だと聞いたので、jsonliteパッケージを使用すると思った。事は、私はすべてのレコードを必要とするが、名前によって埋め込まれた要素(「ソース」)は、既存のフィールドを持つレコードのサブセットのみ「継続」していないということです。 これは現在のところ私のコードです:R jsonliteフィルタレコード

library(jsonlite) 
library(curl) 
url <- "https://s3-eu-west-1.amazonaws.com/es-export-data/logstash-2016.02.15.json" 
test <- stream_in(url(url)) 

多くのうち1つの抽出物です。現在、jsonliteパッケージには、埋め込み要素を平坦化して1つの幅のフラットなデータフレームを作成するための「フラット化」機能があります。その後、私はそれをフィルタリングすることができます。しかし、それは効率的ではないようです。私は、データがロードされたときにプレフィルターをかけることがはるかに効率的だと思います。 ここで一つのレコードのdput:

> dput(test_data) 
"{\"_index\":\"logstash-2016.02.15\",\"_type\":\"productLogs\",\"_id\":\"AVLitaOtp4oNFTVKv9tZ\",\"_score\":0,\"_source\":{\"EntryType\":\"Event\",\"queryType\":\"clientQuery\",\"status\":\"success\",\"cubeName\":\"Hourly Targets Operations by Model\",\"cubeID\":\"aHourlyIAAaTargetsIAAaOperationsIAAabyIAAaModel\",\"startQueryTimeStamp\":\"2016-02-15T02:14:23+00:00\",\"endQueryTimeStamp\":\"2016-02-15T02:14:23+00:00\",\"queryResponeLengthBytes\":0,\"duration\":0,\"concurrentQuery\":14,\"action\":\"finishQueryJaql\",\"@timestamp\":\"2016-02-15T02:14:23.253Z\",\"appTypeName\":\"dataserver\",\"@version\":\"1\",\"host\":\"VDED12270\",\"type\":\"productLogs\",\"tags\":[],\"send_type\":\"PullGen1\",\"sisenseuid\":\"[email protected]\",\"sisenseOwnerid\":\"[email protected]\",\"sisenseVersion\":\" 5.8.1.29\",\"sisenseMonitoringVersion\":\"3.0.0.6\",\"inputType\":\"sqs\",\"token\":\"fTdyoSwaFZTalBlnFIlTsqvvzfKZVGle\",\"logstash_host\":\"vpc_cluster_1\"}}" 
> 

任意のヘルプは

答えて

0

に感謝あなたはハンドラ関数を追加し、あなたが必要とするどの要素を指定する必要があります。

stream_in(url(url) , handler = function(x) x$"_source$duration") 
+0

ハンドラは、両方の行をサブセット行うことができますし、列のサブセット?もしそうなら、それをどうやってお勧めしますか? –