え、まって。その並列分散処理、Kafkaのしくみでもできるの? Apache Kafkaの機能を利用した大規模ストリームデータの並列分散処理
![IoT時代におけるストリームデータ処理と急成長の Apache Flink](https://cdn-ak-scissors.b.st-hatena.com/image/square/40c4d22ccc329d97dfe5984126b0df1b1afbd965/height=288;version=1;width=512/https%3A%2F%2Fcdn.slidesharecdn.com%2Fss_thumbnails%2F20161025iotapacheflink-161025113132-thumbnail.jpg%3Fwidth%3D640%26height%3D640%26fit%3Dbounds)
なんか、やろうぜー、という話になってそのような勉強会が行われたので、参加してた。 connpass.com 会場&飲食の提供はYahoo! Japanさん。ありがとうございました。面白かった。 しゃべってきた Norikraそのものの話はさすがに今更感あったので、Norikraの大事なところと、あとPerfect Norikra (仮)について話してきた。 How to Make Norikra Perfect from SATOSHI TAGOMORI まあ、まだ1byteも存在しないソフトウェアなんだけどな! 存在しないソフトウェアについて話せるようになったの、ちょっと実績解除感があるのではないだろうか。だめか。 Norikraを分散処理対応にするにはクエリ処理エンジンおよびデータ転送層を丸ごと書き直すしかないなー、しかもそこに色々なアイデアが必要だなとは思っていて、そのうちのひとつで
Streams API をこれまでまともに使ったことがなかった。 まともに使おうとしたら例外処理の扱いが非常に難しいことを実感したので、一例を挙げてその難しさを解説する。 やりたい処理 複数のテキストファイルのそれぞれを1行ずつ読みこみ、空白文字で各行を単語に分割し、単語に対して何か処理を行なう、というよくある処理を実装してみよう。処理の手順を手続き的に書くと以下のようになる。 あるディレクトリの直下に存在する複数のテキストファイル(拡張子 .txt)を1つずつ読む 各テキストファイルを1行ずつ読む 各行(文字列)を、空白文字を区切り文字として複数の文字列(単語と呼ぶことにする)に分割する 各単語に対して何か処理をする。以下、処理の名前を analyze とする クラスの雛形 以下の TextFileProcessor を拡張したクラスを実装する。 各単語に関する処理 analyze は実
前置き 話を始める前にBOMとは バイトオーダーマーク (byte order mark)のことです。間違ってもBill of materialsとか東方シューティングのスペカでは無いです。 Unicodeを知らないプログラマは流石に存在しないと思うので割愛して、BOMとは一般にはファイルの先頭につけるもので UTF-8/UTF-16/UTF-32 little endianness/big endianness(UTF-8は除く) を判別するためにあります。やべぇ、わからん、という人は UTF-32 is NOT a fixed-legnth character encoding | 本の虫 を見ましょう。 世の中のテキストファイルは大体UTF-8 with BOMだ(という幻想) という幻想を信じるならバイナリエディタで覗くと でファイルが始まることになります。 ところでみんな、C++
前回、前々回と2回に渡って、ストリームの基本的な使い方について説明してきました。 とはいうものの、いざストリームを使おうとしても、なかなかすんなりとはいかないのも仕方がないところです。今までのJavaのプログラミングスタイルからすると、ストリームのスタイルは大きく異なります。特に関数を用いて処理を指定していく方法は、今までのJavaではあまりありませんでした。 このスタイルは本連載の「Java SE 8のラムダ式はどうやって活用するか」で紹介した、高階関数を用いた関心の分離に他なりません。 そこで、今回は様々な処理をストリームで行うことにより、ストリームを使う上での考え方を紹介していきます。 条件に合致するものに対して処理を行う 拡張for文を使用してリスト1のような処理を書くことはありませんか。 リスト1●条件に合致した要素に対し処理を行う List<String> elements =
一文字:char [/2010-06-20] 不変の文字列:String [/2023-09-24] 可変の文字列:StringBuffer/StringBuilder [/2023-09-24] StringWriter(PrintWriter)/PrintStream [/2009-02-14] StringJoiner [2014-03-19] コードポイントの例 [2017-01-28] 文字のStream [2014-04-29] 文字列の結合 [2007-07-01] 単独の結合の実行時間 ループ内結合の実行時間 +演算子の実態 [/2008-01-27] 結論 [/2014-04-29] 文字列の比較方法 [2008-04-16] 文字列比較の書き順 [2008-05-02] 半角カタカナ・全角ひらがな変換 [2012-06-15] 半角英数変換 [2014-04-29] c
なんで無いんでしょう? 無いので作りましたというお話です。 zipとは? ファイル圧縮形式の話ではありません。 2つのリストから、それらの要素をペアにしたリストを返す関数です。 リスト1 : [1, 2, 3 ..] リスト2 : ['a', 'b', 'c' ..] 生成されるリスト : [(1, 'a'), (2, 'b'), (3, 'c') ..] java.util.stream.Stream でこれと同等の機能が提供されているだろうと思い探したのですが、標準ライブラリでは提供されていないようですね。 作成したものと使い方 javadoc ソース リポジトリ ZippedStream というクラス1と、付随するクラスを作成しました。 次のように使用します。 Stream<Integer> stream1 = Stream.of(1, 2, 3); Stream<String> s
Java8で追加されたforEachメソッドの使い方について簡単にまとめました。最初はfor文から全て置き換えて使えると思ってましたが、そうは上手くいかなかったようです。 forEachメソッドとは forEachメソッドはコレクションや配列に対して繰り返し処理を行うためのメソッドです。今までだとfor文で記述していた部分をラムダ式で置き換える事ができるようになりました。 Java8では追加された機能の Stream API を使用してコレクションや配列の複数の値に対して様々な処理を行えます。使い方としてはコレクションや配列を一度Streamに変換して各メソッドを実行していくわけですが、forEach と spliterator メソッドに関しては Iterable インターフェースに default メソッドとして追加されていますので、Streamに変換する必要がありません。 ここで少し
Java 8 Stream API にテキストを流してみる(生成編)- Qiita Java 8 Stream API にテキストを流してみた(終端操作編)- Qiita Java 8 Stream API にテキストを流してみて(中間操作編)- Qiita Java 8 が出てからだいぶたつわけだが その目玉機能の一つだった Stream API は今、開発現場でどれだけ使われているのだろうか。自分も出始めたころにちょっと触って理解しきれないまま敬遠してきた一人だが、最近また使う機会があったので情報など漁っている。 しかしまだ入門的な紹介かディープな検証ばかりで、どうもピンと来ない。もし Stream が便利で広く開発現場で使われているなら、そろそろもう少し実践的な情報が上がってきていいと思うのだが。 現状、Stream をちゃんとは理解しようとするなら、やはり自分の手で具体的なコードを
札幌は大荒れ、の予想だったのですが、今のところ大変穏やかな天候です。こんにちは。こむろです。 この記事はJava Advent Calendar 2014の17日目になります。 昨日16日は@zephiransasさんの「Lambda-behaveでテストを書こう」でした。 Java8の素晴らしき世界 Java8を使ってプログラミングしていると、新しい機能を色々と使うことで簡潔で読みやすいコードを記述することが出来ます。これが思いの外楽しくるんるん気分でコードを書くことが出来ます。今までのように型をいちいち書かなきゃとかネスト地獄みたいなところを、少しだけ、でも大胆に改善することが出来、久々にJavaでコードを書いていて楽しいと思った時間でした。AndroidはJavaではn(ry 特にここ数ヶ月、Play for JavaでJava8を利用した開発をしていたのですが、その中でStream
概要 Stream系クラス Stream系メソッド Stream生成 [/2018-10-01] メソッド Stream [/2021-03-21] BaseStream プリミティブStream [/2021-03-21] onClose [2015-12-13] Streamの例 [/2021-03-21] 概要 JDK1.8で導入されたStreamは、複数の値(オブジェクト)に対して何らかの処理(変換や集計)を行う事を分かりやすく記述できる。 import java.util.stream.Stream; Streamの値の持ち方はjava.util.Listのようなイメージ。 しかしStreamの操作は一度しか行えないので(ScalaのTraversableOnce相当)、java.util.Iteratorの方が近いかも。 つまり複数の値を保持し、順次処理していく。 なお、Str
Stream API の中間操作について一番使う機会の多い filter と map について使用方法などをまとめました。 filter : 抽出 引数:Predicate<T> / 戻り値:Stream<T> 関数型インターフェース filterメソッドはPredicate<T>を引数に取り、Streamのオブジェクトから条件に一致する(Predicateがtrueを返す)オブジェクトを抽出します。 Predicateは判定を行うための関数型インターフェースです。実装が必要なメソッドはboolean test(T t)で引数を1つ受け取り、booleanを返します。 filterの使い方 IntegerのStreamから数値が200以上のデータを抽出するサンプルです。 List<Integer> prices = Arrays.asList(100, 200, 300, 400, 500
「大きく進化したJava SE 8は企業に多くのメリットをもたらす。プロジェクト・マネジャーやアーキテクトも、今すぐ移行に取り掛かるべき」と訴えるJavaエバンジェリストの寺田佳央氏。ラムダ式とストリームAPIを例にとり、Java SE 8によるプログラミングの特徴と利点を語った。 2014年3月にリリースされた「Java SE 8」の大きな変更点の1つは、新たな言語機能として「ラムダ式(Lambda Expressions)」が導入されたことだ。同機能を使うことで、開発者は従来よりも効率的にプログラムを書けるようになる。また、併せて導入された「ストリームAPI(Stream API)」を使用することで並列処理の実装が容易となり、マルチコア・プロセッサの能力を生かしたハイパフォーマンスなアプリケーションを迅速に作れるようになる。 日本オラクルのJavaエバンジェリスト 寺田佳央氏は、企業の
Droongaについて Droongaは、ストリーム指向の処理モデルを採用した分散全文検索エンジンです。検索、更新、集約などの多くの操作がパイプラインを通じて行われるこのモデルにより、Droongaは高い柔軟性と拡張性を備えています。また、Droongaは既存操作の組み合わせによる複雑な操作にも対応しています。ユーザーはRubyでプラグインを開発して、独自の操作をDroongaに加える事ができます。 詳細は概要をご覧ください。 将来のDroongaについてはロードマップをご覧ください。 ドキュメント Droongaをより効果的に使うために、以下のドキュメントが役立つでしょう。 インストール手順:Droongaのインストール手順の説明です。 チュートリアル:Droongaの使い方を実例を通して解説します。 リファレンスマニュアル:詳細な仕様についての説明です。 コミュニティー:Droonga
こんにちわ、みけです。 もう、Streamの書きすぎで、 なんだか、for文が書けない身体になってしまいました(大袈裟) というわけで、Streamなのですが、 慣れていないと 「はよ!Supplier<?>、BinaryConsumer<?, ?>をはよ!」 とIDEにせかされて、 あれっ?これってなんだっけ?ってなってしまう のではないかと思います。 というわけで、Streamで使う用途で Functional Interfaceをまとめてみることにしました。 Streamの生成(source)に用いるもの Supplier<T> 引数なしで、オブジェクトを生成するFunctional Interfaceです。 Stream#generateメソッドで利用します。 例 @Test public void supplier_Tのサンプル () { final AtomicInteger
Javaにおけるデータ入出力の考え方 オブジェクト指向言語であるJavaでは、データの入出力にもクラスを使います。 データの流れをクラスInputStream/OutputStreamのインスタンスとして扱い、 それらに対して読み書きをするのにクラスInputStreamReader/OutputStreamWriterを用います。 上記の図は入力を行う際の概念図ですが、実際にデータ入力を行う際には、 対象とするデータの種類やデータのある場所によって、行うべき処理内容が異なってきます。 例えば、ローカルのディスクに存在するファイルからの読み込みと、 ネットワークを介したサーバの応答の受信では、明らかに処理が異なります。 Javaではオブジェクト指向の特徴を生かし、 入力データ全般に成り立つ性質をクラスInputStreamに持たせ、 それを継承する形で様々な種類の入力データに対応するよう、
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く