


JavaはPython Sparkプログラムを呼び出して立ち往生します:Runtime.getRuntime()。exec()ブロッキングの問題を解決する方法?
Javaコールに貼り付けられたPythonコードの分析とソリューション
Javaを使用してPythonコードを呼び出す過程で、プログラムが行き詰まって実行を続けることができないなど、いくつかの困難な問題に遭遇することがよくあります。この記事では、特定のケースを分析し、対応するソリューションを提供します。
問題の説明:開発者はJavaのRuntime.getRuntime()。exec()メソッドを使用してPythonスクリプトを実行し、Pythonスクリプトはデータ処理にSparkを使用します。 Java側では、Pythonスクリプトの出力はプロセスオブジェクトを介して取得されますが、Pythonスクリプトがsorted_word_count.take(20)に実行された後、Javaサイドプログラムは立ち往生しており、実行を継続できません。
Pythonスクリプトコードは次のとおりです。
Spark = sparks.builder.appname( "java backend"を読む ")。マスター(" local [*] ")。getorcreate(); #渡されたパラメーターコメントを取得= sys.argv [1] #JSON文字列をPythonオブジェクトに変換するコメント= json.loads(コメント) #コメントリストをRDDに変換します comment_rdd = spark.sparkcontext.parallelize(comment) #RDDをデータフレームに変換します df = spark.createdataframe(comment_rdd.map(lambda x:row(** x))) #ストップワードライブラリSTOP_WORDS = SPARK.SPARKCONTEXT.TEXTFILE( "c:/users/10421/downloads/baidu_stopwords.txt")。collect()をロードする #...(ここではいくつかのコードが省略されています)... #各単語の発生数を計算しますword_count = df.rdd.map(lambda x:(x.word、1))。 sorted_word_count = word_count.sortby(lambda x:x [1]、ascending = false) top_20_words = sorted_word_count.take(20) 列= 0 top_20_wordsの列の場合: 印刷(行[列])
Javaコードスニペットは次のとおりです。
プロセスプロセス= runtime.getRuntime()。exec(args1); //プログラムの実行結果inputstream inputstream = process.getInputStream(); BufferedReader Reader = new BufferedReader(new inputstreamReader(inputStream、 "gb2312")); // ...(ここではいくつかのコードが省略されています)...
問題の分析:テスト後、Javaプログラムが立ち往生した理由は、Pythonスクリプトのコードsorted_word_count.take(20)の実行であることがわかりました。コードのこの部分は、Spark Processingが完了して結果を返すまでブロックされます。 Process.getInputStream()がブロックしているため、Pythonプログラムの出力が時間内に標準出力ストリームに出力されない場合、Javaプログラムはそれを待って、停止します。
解決策:問題は、キャラクターエンコーディングに最も可能性が高いです。元のコードでは、GB2312エンコーディングを使用してPythonの出力を読み取ります。これは、Pythonスクリプトの出力エンコードと矛盾している可能性があり、データの読み取り閉塞を引き起こします。 Javaコードを変更し、UTF-8エンコードを使用してPythonの出力を読み取ると、この問題を解決できます。
変更されたJavaコード:
BufferedReader Reader = new BufferedReader(new inputstreamReader(inputStream、 "utf-8")); BufferedReader reader2 = new BufferedReader(new inputStreamReader(errorStream、 "utf-8"));
読み取り入力ストリームのエンコードとJavaコードのエラーストリームをUTF-8に変更することにより、Javaプログラムの問題を解決できます。 Pythonスクリプトは、UTF-8を使用して出力がエンコードされていることを確認する必要があることに注意してください。問題が続く場合は、Sparkジョブの実行効率と、Pythonスクリプトに他の潜在的なブロッキング操作があるかどうかをさらに確認する必要があります。
以上がJavaはPython Sparkプログラムを呼び出して立ち往生します:Runtime.getRuntime()。exec()ブロッキングの問題を解決する方法?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









SQL挿入ステートメントは、データベーステーブルに新しい行を追加するために使用され、その構文は次のとおりです。Table_name(column1、column2、...、columnn)values(value1、value2、... ...、valuen);。このステートメントは、複数の値の挿入をサポートし、ヌル値を列に挿入できるようにしますが、挿入された値が列のデータ型と互換性があることを確認して、一意性の制約に違反しないようにする必要があります。

データの専門家として、さまざまなソースから大量のデータを処理する必要があります。これは、データ管理と分析に課題をもたらす可能性があります。幸いなことに、AWS GlueとAmazon Athenaの2つのAWSサービスが役立ちます。

Alter Tableステートメントを使用して、SQLの既存のテーブルに新しい列を追加します。特定の手順には、テーブル名と列情報の決定、テーブルステートメントの変更、およびステートメントの実行が含まれます。たとえば、顧客テーブルに電子メール列を追加します(Varchar(50)):Alter Table Customersはメール(50)を追加します。

sqlに列を追加するための構文は、table table_name add column_name data_type [not null] [default default_value];です。 table_nameはテーブル名、column_nameは新しい列名、data_typeはデータ型であり、nullはnull値が許可されているかどうかを指定しない、デフォルトのdefault_valueがデフォルト値を指定します。

SQLテーブルクリアパフォーマンスを改善するためのヒント:削除の代わりにTruncateテーブルを使用し、スペースを解放し、ID列をリセットします。カスケードの削除を防ぐために、外部のキーの制約を無効にします。トランザクションカプセル化操作を使用して、データの一貫性を確保します。バッチはビッグデータを削除し、制限で行数を制限します。クリアリング後にインデックスを再構築して、クエリ効率を改善します。

はい、削除ステートメントを使用してSQLテーブルをクリアできます。手順は次のとおりです。クリアするテーブルの名前にtable_nameを置き換えます。

SQL(Structured Query Language)は、データベースの作成、管理、およびクエリに使用されるプログラミング言語です。主な機能には、データベースとテーブルの作成、データの挿入、更新、削除、結果の結果とフィルタリング機能、集約関数、テーブルの結合、サブQUERIES、オペレーター、機能、キーワード、データ操作/定義/コントロール言語、接続タイプ、クエリ最適化、セキュリティ、ツール、リソース、リソース、バージョン、一般的なエラー、ロバット、ロバット、ドバギングのエリック。

新しく追加された列のデフォルト値を設定します。3つのテーブルステートメントを使用します。列の追加を指定し、デフォルト値を設定します:table table_name add column_name data_type default_valueを変更します。制約句を使用してデフォルト値を指定します。テーブルテーブルを変更する列列の追加column_name data_type constraint default_constraint default default_value;
