インタラクティブなマップ レイヤーデータを読み取ります

データ クライアント ライブラリには、 インタラクティブなマップ レイヤーを含む、サポートされているすべてのレイヤータイプのデータを含むデータフレームを作成するためのカスタム Spark DataFrameReader というクラスLayerDataFrameReaderがあります。

読み取りプロセス

読み取り操作は、次のステップに従って動作します。

  1. Spark Connector がクエリを分析し、サーバーとの通信を開始して、 Spark クラスタ全体にクエリを配布するための情報を取得します。 この段階では、クエリの一部である個々のフィルターがすでに考慮されています。
  2. Spark は、クラスタ内のワーカーにクエリーを配布します。このワーカーが、サーバから個々のデータのチャンクの要求を開始します。
  3. サーバーから返されたデータは、ワーカーノードの一般的な行形式に変換されます。
  4. 結果の行が Spark フレームワークに渡さ DataFrameれ、ファイナライズされた行が返されます。

データフレーム列

他の種類のレイヤーとは異なり、インタラクティブなマップレイヤーでは、 Spark フレームワークを操作するときに静的な行書式が使用されます。

データ列

DataFrame インタラクティブマップレイヤーの場合、には次の列が含まれます。

列名 データ型 意味
mt_id 文字列 オブジェクトの OID
geometry オブジェクトのジオメトリ。最初のフィールドにはタイプが含まれ、 2 番目のフィールドには座標が含まれます
properties 地図 縮小された形式のオブジェクトのプロパティ
custom_members 地図 非標準のトップレベルフィールドが縮小された形式で表示されます
mt_tags 配列 オブジェクトのタグ
mt_datahub 行 <BIGINT 、 BIGINT Object メタデータ : createdAt および updatedAt

プロジェクトの依存関係

HERE platform Spark コネクターを使用してインタラクティブマップ レイヤーからデータを読み取るアプリケーションを作成する場合 は、「 Spark コネクターの依存関係」の章の説明に従って、必要な依存関係をプロジェクトに追加してください。

インタラクティブなマップ レイヤーデータを読み取ります

次のスニペットで DataFrame は、カタログのインタラクティブなマップ レイヤーからインタラクティブなマップ レイヤーにアクセスする方法を示します。 インタラクティブマップ レイヤーでは、ダイナミックスキーマが使用されます。 したがって、明示的に形式を指定する必要はありません。

適切なオプションを渡すことで、インタラクティブマップレイヤのコンテキストを提供することもできます。 オプション名の詳細については、以下のを参照してください。

Scala
Java
import com.here.platform.data.client.spark.InteractiveMapDataFrame.InteractiveMapContextOptionName
import com.here.platform.data.client.model.InteractiveMapContext.{DEFAULT, EXTENSION}
import com.here.platform.data.client.spark.LayerDataFrameReader.SparkSessionExt
import org.apache.spark.sql.SparkSession
val query = "mt_geometry=inboundingbox=(85, -85, 180, -180) and  p.row=contains=7"

log.info("Loading data from IML for default context.")
val readDF = sparkSession
  .readLayer(catalogHrn, layerId)
  .query(query)
  .load()

log.info("Data loaded for default context!")
val defaultContextCount = readDF.count()
log.info("Dataframe contains " + defaultContextCount.toString + " rows for default context.")

log.info("Loading data from IML for extension context.")
val readExtensionDF = sparkSession
  .readLayer(catalogHrn, layerId)
  .option(InteractiveMapContextOptionName, EXTENSION)
  .query(query)
  .load()

log.info("Data loaded for extension context!")
val extensionContextCount = readExtensionDF.count()
log.info(
  "Dataframe contains " + extensionContextCount.toString + " rows for extension context.")
import static com.here.platform.data.client.model.InteractiveMapContext.EXTENSION;
import static com.here.platform.data.client.spark.InteractiveMapDataFrameConstants.INTERACTIVE_MAP_CONTEXT_OPTION_NAME;

import com.here.hrn.HRN;
import com.here.platform.data.client.model.InteractiveMapContext;
import com.here.platform.data.client.spark.javadsl.JavaLayerDataFrameReader;
import org.apache.spark.sql.Dataset;
import org.apache.spark.sql.Row;
import org.apache.spark.sql.SparkSession;

JavaLayerDataFrameReader javaLayerDFReader = JavaLayerDataFrameReader.create(sparkSession);
String query = "mt_geometry=inboundingbox=(85, -85, 180, -180) and  p.row=contains=7";

Dataset<Row> inputDF = javaLayerDFReader.readLayer(catalogHrn, layerId).query(query).load();

// Show the schema and the contents of the DF
long defaultContextCount = inputDF.count();
log.info("Number of rows in dataframe with default context: " + defaultContextCount);

// When reading interactive map layer, one can additionally pass an optional context
Dataset<Row> interactiveDF =
    javaLayerDFReader
        .readLayer(catalogHrn, layerId)
        .option(INTERACTIVE_MAP_CONTEXT_OPTION_NAME, EXTENSION)
        .query(query)
        .load();

long extensionContextCount = interactiveDF.count();
log.info("Number of rows in dataframe with extension context: " + extensionContextCount);
注 :
  • インタラクティブなマップ レイヤーからデータを読み取る場合、ユーザーは現在、メルカトル図法の範囲内でデータを要求することに制限されています。つまり、 -85 ° ~ +85 ° の緯度内のオブジェクトのみが返されます。
  • インタラクティブマップ レイヤーからの読み取りでは、 option("olp.connector.ignore-invalid-partitions", true) がサポートされています。この機能を使用すると、一度にロードするオブジェクトの数が多すぎるパーティションをスキップできます。 デフォルトは false です。
  • インタラクティブマップ レイヤーからの読み取りでは、がサポート option("olp.connector.max-features-per-request", <INTEGER>) されます。この機能を使用すると、 1 つの要求に含めるオブジェクトの最大数を定義できます。 デフォルトは 10000 です。
  • インタラクティブマップレイヤからの読み取りは、 option("olp.connector.interactive-map-context", <InteractiveMapContext>) ユーザがインタラクティブマップレイヤ操作のコンテキストを定義できるをサポートしています。 このオプションを省略することは、を使用することと同じ InteractiveMapContext.DEFAULTです。 このオプションの名前が重複しないように、java()com.here.platform.data.client.spark.InteractiveMapDataFrameConstants.INTERACTIVE_MAP_CONTEXT_OPTION_NAMEとscala()の両方に定数が存在com.here.platform.data.client.spark.InteractiveMapDataFrame.InteractiveMapContextOptionNameします。
  • RSQL の詳細 については、 RSQL を参照してください。

」に一致する結果は 件です

    」に一致する結果はありません