問題タブ [scalaz-stream]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
scala - 解析タスクに Scalaz Stream を使用する (Scalaz Iteratees を置き換える)
序章
私は多くのプロジェクトで Scalaz 7の iteratees を使用していますが、主に大規模なファイルを処理するためです。iteratee パッケージを置き換えるように設計された Scalazストリームへの切り替えを開始したいと思います (率直に言って、多くの部分が欠落しており、使用するのが面倒です)。
ストリームは、Haskell にも実装されているマシン(繰り返しのアイデアの別のバリエーション) に基づいています。私は Haskell マシン ライブラリを少し使用しましたが、マシンとストリームの関係は (少なくとも私には) 完全には明らかではなく、ストリーム ライブラリのドキュメントはまだ少しまばらです。
この質問は、反復の代わりにストリームを使用して実装したい単純な解析タスクに関するものです。誰も私を打ち負かすことができなければ、私は自分で質問に答えますが、この移行を行っている (または少なくとも検討している) のは私だけではないと確信しています。公の場でやったほうがいいと思った。
仕事
トークン化され、品詞でタグ付けされた文を含むファイルがあるとします。
1 行に 1 つのトークンがあり、単語と品詞は 1 つのスペースで区切られ、空白行は文の境界を表します。このファイルを解析して、文のリストを返したいと思います。これは、文字列のタプルのリストとして表すこともできます。
いつものように、無効な入力やファイル読み取りの例外が発生した場合に正常に失敗したり、手動でリソースを閉じることを心配したりしたくありません。
反復ソリューション
最初に、いくつかの一般的なファイル読み取り用のもの (実際には iteratee パッケージの一部である必要があります。現在、この高レベルのものはリモートで提供されていません):
そして、センテンス リーダー:
そして最後に、解析アクション:
それが機能することを実証できます。
これで完了です。
私が欲しいもの
iteratee の代わりに Scalaz ストリームを使用して実装されたほぼ同じプログラム。
performance - scalaz-stream による行カウントのパフォーマンス
関数型プログラミング in ScalalinesGt1
の第 15 章の冒頭にある命令型の行カウント コード (「参考文献」を参照) を、 scalaz-stream (「参考文献」を参照)を使用するソリューションに翻訳しました。ただし、パフォーマンスはそれほど優れていません。命令型コードは、私の scalaz-stream ソリューションよりも約 30 倍高速です。だから私は根本的に間違ったことをしていると思います。scalaz-stream コードのパフォーマンスをどのように改善できますか?linesGt2
linesGt2
ここに私の完全なテストコードがあります:
scala - Scalaz ストリーム グループのソートされたデータベースの結果
私のコードには共通のパターンがあります。データベースからの結果を並べ替えましたが、ネストされた構造でそれらを出力する必要があります。これをストリーミングしたいので、一度にメモリに保持するレコードをできるだけ少なくしたいと考えています。TravesableLike.groupBy を使用すると、データがソートされていないと想定されるため、変更可能なマップが不必要に埋められます。これを真にストリーミングし続けたいと思います。ここで scalaz-stream は役に立ちますか?
プロセスに foldLeft や scanLeft などの関数があまりないので、grandparent_id、parent_id、または child_id の変更を検出してグループを発行する方法がわかりません。何か案は?
stream - 複数の Scalaz-Stream をどのように組み合わせて、完了の順序は維持されますが、インターリーブは強制されませんか?
2 つのプロセスの組み合わせであるプロセスをどのように取得しますか?
スリープが短いものを探して、より頻繁に発生し、遅いプロセスの前に複数回表示されることを確認しています。時間を割いてこれを読んでくれた人、特に洞察を共有できる人に感謝します。
scala - scalaz-stream の Process を実行すると、パラメーター C の暗黙の値が見つかりませんでした: scalaz.Catchable[F2]?
error: could not find implicit value for parameter C: scalaz.Catchable[F2]
実行時に次のようになるのはなぜP(1,2,3).run
ですか?
scalaz-stream-sandbox プロジェクトは GitHub で入手できます。実行sbt console
してP(1,2,3).run
から、問題に直面します。
file - Scala 高速テキスト ファイルの読み取りとメモリへのアップロード
Scala では、テキスト ファイルを読み取って配列にアップロードするための一般的な方法は次のとおりです。
特に非常に大きなファイルの場合、おそらく最初にバイトのブロックをメモリに読み込んでから改行文字で分割することによる、より高速なアプローチはありますか? (一般的に使用されるアプローチについては、Scala でファイル全体を読み取るを参照してください。)
どうもありがとう。