SQLクエリはApacheIgniteキャッシュに対して空の結果を返します

マヌエル・モラート

SparkRDDからIgniteキャッシュへの挿入を実行しようとしています。Igniteのバージョン2.2とSparkの2.1を使用しています。

私が取る最初のステップは、次のように、別のscalaスクリプトでキャッシュを作成することです。

object Create_Ignite_Cache {

case class Custom_Class(
                   @(QuerySqlField @field)(index = true)   a: String,
                   @(QuerySqlField @field)(index = true)  b: String,
                   @(QuerySqlField @field)(index = true)  c: String,
                   @(QuerySqlField @field)(index = true)  d: String,
                   @(QuerySqlField @field)(index = true)  e: String,
                   @(QuerySqlField @field)(index = true)  f: String,
                   @(QuerySqlField @field)(index = true)  g: String,
                   @(QuerySqlField @field)(index = true)  h: String

                 )
def main(args: Array[String]): Unit = {
 val spi = new TcpDiscoverySpi
 val ipFinder = new TcpDiscoveryMulticastIpFinder
 val adresses = new util.ArrayList[String]
 adresses.add("127.0.0.1:48500..48520")
 ipFinder.setAddresses(adresses)
 spi.setIpFinder(ipFinder)
 val cfg = new IgniteConfiguration().setDiscoverySpi(spi).setClientMode(true)
 val cache_conf = new CacheConfiguration[String, Custom_Class]().setCacheMode(CacheMode.PARTITIONED).setAtomicityMode(CacheAtomicityMode.ATOMIC).setBackups(1).setIndexedTypes(classOf[String], classOf[Custom_Class]).setName("Spark_Ignite")
 val ignite = Ignition.getOrStart(cfg)
 ignite.getOrCreateCache(cache_conf)
 System.out.println("[INFO] CACHE CREATED")
 ignite.close()
}
}

ignitevisorからわかるように、キャッシュは正常に作成されます。 ここに画像の説明を入力してください

次に、Sparkアプリを実行して、igniteRDDのコンテンツをキャッシュに挿入しました。

object Spark_Streaming_Processing {

 case class Custom_Class(
                      @(QuerySqlField @field)(index = true) a: String,
                      @(QuerySqlField @field)(index = true) b: String,
                      @(QuerySqlField @field)(index = true) c: String,
                      @(QuerySqlField @field)(index = true) d: String,
                      @(QuerySqlField @field)(index = true) e: String,
                      @(QuerySqlField @field)(index = true) f: String,
                      @(QuerySqlField @field)(index = true) g: String,
                      @(QuerySqlField @field)(index = true) h: String

                    )

   //START IGNITE CONTEXT

  val addresses=new util.ArrayList[String]()
  addresses.add("127.0.0.1:48500..48520")

  val igniteContext:IgniteContext=new IgniteContext(sqlContext.sparkContext,()=>
    new IgniteConfiguration().setDiscoverySpi(new TcpDiscoverySpi().setIpFinder(new TcpDiscoveryVmIpFinder().setAddresses(addresses))
      ).setCacheConfiguration(new CacheConfiguration[String,Custom_Class]()
      .setName("Spark_Ignite").setBackups(1).setIndexedTypes(classOf[String],classOf[Custom_Class]))
    ,true)


  println(igniteContext.ignite().cacheNames())

  val ignite_cache_rdd:IgniteRDD[String,Custom_Class] =igniteContext.fromCache[String,Custom_Class]("Spark_Ignite")

  val processed_Pair:RDD[(String,Custom_Class)]=(...)// rdd with data, which as you can see has the correct datatypes as parameters

  ignite_cache_rdd.savePairs(processed_PairRDD)

}
  }

ご覧のとおり、クラスは完全に同一です。

アプリを正常に実行した後、コンソールの前のスクリーショットで見られるように、キャッシュに63レコードが含まれていることがignitevisorで確認できます。

ただし、次のように、キャッシュに対してSQLクエリを実行しようとすると、次のようになります。

      ignite_cache_rdd.sql("select * from Custom_Class").show(truncate = false)

その結果、空のテーブルが表示されます。

外部SQLサーバーを介してクエリを実行した場合も同じことが起こります。

私はキャッシュ演繹作成し、スパークアプリを実行しない場合、それが存在するdoesntの場合は不思議なことに、IgniteContextは、キャッシュを作成し、THEN私は私のクエリでレコードを表示することができています!

ここで何が問題になるのでしょうか?

キーと値の両方のデータ型がまったく同じであることがわかる限り、クエリを実行するとそれらを確認できるはずです。

お時間をいただきありがとうございます。

デニス

ここでの問題は、異なるクラスを使用してキャッシュを作成し、それにデータを挿入することです。これら2つのクラスのフィールドは一致しますが、完全修飾名は異なるため、これらは2つの異なるクラスです。

SQLからデータをクエリできるようにする場合は、キャッシュの作成時とデータの挿入時に同じクラスを使用する必要があります。

キャッシュの作成をスキップすることで問題が解決する理由は、Sparkアプリが既存のキャッシュを使用する代わりにキャッシュ自体を作成するためです。したがって、Sparkがそれを作成するとき、実際のオブジェクトのクラスがキャッシュの作成中に使用されます。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

SQLクエリツールを使用してApacheIgniteキャッシュをクエリする方法は?

HIbernateクエリキャッシュは結果をnullとしてキャッシュしています

Apache Ignite sqlクエリは、データベースからの完全な結果ではなく、キャッシュの内容のみを返します

クエリは空の結果セットを返します

Firestoreはクエリ結果をキャッシュしますか?

キャッシュなしのリクエストに対して304を返すIE11

Jmeterは、SQLクエリに対して「ステートメントは結果セットを返しませんでした」を返します

GitHub APIはスキーマクエリに対して無効な結果を返しますか?

ハッシュに対してクエリを実行し、別のハッシュの結果を取得するにはどうすればよいですか?

Mongoose / MongoDB GeoJSONクエリは、空の結果を返します

クエリwinstonログは空の結果を返します

phpmysql更新クエリは空の結果を返します

GetLogicalProcessorInformation()を使用してシステムのキャッシュ情報をクエリする無効な結果

ストアドプロシージャで繰り返し使用されるサブクエリの結果をキャッシュできますか?

Mongo検索クエリは、存在するフィールドに対して常に空の結果を返します

Laravel-Eloquentクエリを使用してリレーションシップテーブルの結果をキャッシュします

mysqlのselectクエリは常に空の結果を返します

SQL Serverは、同じ日付選択クエリに対して異なる結果を返します。異なるシナリオでは

既存のSQL結果に対してクエリを実行しますか?SQL結果のサブセットから結果を検索する

gitはその結果をキャッシュしますか?

ハッシュはSQLの同じ入力に対して異なる結果をもたらします

Javascript配列は最初の結果に対して「空」を返します

サブクエリの結果のWHERE句は、常に空のセットを返します

ApacheIgniteキャッシュのSQLクエリ

ObjectifyはQuery.fetchKeysの結果をmemcacheにキャッシュしますか?

MySQLのクエリキャッシュはしばらくすると自動的にリセットされますか?一部の結果は少しの間キャッシュされますが、翌日リセットされます

Laraveleloquentはクエリ結果に対してクエリを実行します

このSQLクエリはどのようにして同じid_productの結果を返しますか?

postgresは私のクエリをキャッシュしていますか?

TOP 一覧

  1. 1

    三項演算子良い練習の代わりとしてOptional.ofNullableを使用していますか?

  2. 2

    Spring Boot Filter is not getting invoked if remove @component in fitler class

  3. 3

    STSでループプロセス「クラスパス通知の送信」のループを停止する方法

  4. 4

    セレンのモデルダイアログからテキストを抽出するにはどうすればよいですか?

  5. 5

    ビュー用にサイズ変更した後の画像の高さと幅を取得する方法

  6. 6

    画像変更コードを実行してもボタンの画像が変更されない

  7. 7

    Three.js indexed BufferGeometry vs. InstancedBufferGeometry

  8. 8

    VisualStudioコードの特異点/ドッカー画像でPythonインタープリターを使用するにはどうすればよいですか?

  9. 9

    Python / SciPyのピーク検出アルゴリズム

  10. 10

    Ansibleで複数行のシェルスクリプトを実行する方法

  11. 11

    __init__。pyファイルの整理中に循環インポートエラーが発生しました

  12. 12

    二次導関数を数値計算するときの大きな誤差

  13. 13

    tkinterウィンドウを閉じてもPythonプログラムが終了しない

  14. 14

    androidsoongビルドシステムによるネイティブコードカバレッジ

  15. 15

    Reactでclsxを使用する方法

  16. 16

    値間の一致を見つける最も簡単な方法は何ですか

  17. 17

    Using Angular's UI-router, how can we make sure the new version of the html partial views are used, rather than the cached version?

  18. 18

    reCAPTCHA-エラーコード:ユーザーの応答を検証するときの「missing-input-response」、「missing-input-secret」(POSTの詳細がない)

  19. 19

    PyTesseractを使用した背景色のため、スクリーンショットからテキストを読み取ることができません

  20. 20

    エンティティIDを含む@RequestBody属性をSpringの対応するエンティティに変換します

  21. 21

    How to access json value by key value in freemarker?

ホットタグ

アーカイブ