Spark-sqlはelasticsearchのピットを読み書きします

// 写elasticsearch的代码
ds.write
      .format("org.elasticsearch.spark.sql")
      .option("es.nodes.wan.only", "true")
      .option("es.mapping.id", "_id")
      .option("es.mapping.exclude", "_id")
      .option("es.nodes", host)
      .option("es.port", port)
      .option("es.update.script.lang","painless")
      .option("es.update.script.inline",script)  // es.update.script.inline 6.0以及之后的版本
      .option("es.update.script.params", params)
      .option("es.write.operation", "upsert")
      .option("es.batch.write.retry.count", 3)
      .option("es.update.retry.on.conflict", 3)
      .option("es.mapping.exclude", "_id")
      .mode("append")
      .save(index_name)
// 读取elasticsearch的代码配置
val ds = spark.read
      .format("org.elasticsearch.spark.sql")
      .option("es.read.metadata", "true") // 读取元数据信息
      .option("es.read.metadata.field", "_metadata")
      .option("es.nodes.wan.only","true") // 公网的时候必传
      .option("pushdown", "true")
      .option("es.port",port)
      .option("es.net.ssl","false")
      .option("es.nodes", host)
      .option("query", query) // 传入查询的dsl语句
      .option("es.read.field.include", includeField) // 读取数据的时候可以在这个进行字段筛选
      .option("es.read.field.as.array.include", arrIncludeField) // 在读取数组的时候需要加这个参数,否则无法识别
      .option("es.mapping.date.rich", "false")
      .load(index_name)

1、es.nodes.wan.only

実行中のsparkプログラムとeasitcsearchが同じネットワークセグメントにある場合、これを追加しなくても問題はありません。ただし、パブリックネットワークなど、同じネットワークセグメントにない場合は、要求失敗エラーが報告されます。

2、es.update.retry.on.conflict

同時更新の場合、同じレコードに更新すると競合が報告されるため、このパラメーターを設定する必要があります

3、es.update.script.inline

Elasticsearのスパークプラグインは、バージョン6.0より前のes.update.scriptパラメーターを使用していました。5.xバージョンを使用しているため、es.update.scriptパラメーターを使用しましたが、ここではネストされたタイプのデータ構造を更新しています。 scala.tuple2に変換できないというエラーが報告されます。パラメータes.update.script.inlineを使用して解決しますが、このパラメータを使用すると、es7.0の更新時にこのエラーが報告されます:https:// discuss。 elastic.co/t/upsert-nested-fields-with-spark/128813

Elasticsearchにsparkの構成アイテムリンクを添付します:https//www.elastic.co/guide/en/elasticsearch/hadoop/current/configuration.html

4. spark-sqludfでブロードキャスト変数を取得する際の問題

今日、次のような問題が発生しました:https//segmentfault.com/q/1010000008010132。udfでブロードキャスト変数を呼び出して取得した値は、常にnullポインターを報告しました。その後、ブロードキャスト変数はudfのメンバー変数として取得されました。クラス。到着しました。udf関数のクラスファイルは呼び出しのために各エグゼキュータノードに配布されるため、構築されたブロードキャスト変数のメンバー変数も各エグゼキュータで正常に取得できます。

おすすめ

転載: blog.csdn.net/qq_32323239/article/details/105825381