Repository: great-expectations/great_expectations

Issue:
Use cleaner solution for non-truncating division in python 2
Prefer `from __future__ import division` to `1.*x/y`


Discussion:
Done inline during improve_partitions push.

Resolving patch:
diff --git a/great_expectations/datasource/data_connector/configured_asset_azure_data_connector.py b/great_expectations/datasource/data_connector/configured_asset_azure_data_connector.py
--- a/great_expectations/datasource/data_connector/configured_asset_azure_data_connector.py
+++ b/great_expectations/datasource/data_connector/configured_asset_azure_data_connector.py
@@ -161,7 +161,7 @@ def _get_full_file_path_for_asset(
     ) -> str:
         # asset isn't used in this method.
         # It's only kept for compatibility with parent methods.
-        # Pandas and Spark execution engines require separate paths for compatibility with Azure's API.
+        # Pandas and Spark execution engines utilize separate path formats for accessing Azure Blob Storage service.
         full_path: str
         if isinstance(self.execution_engine, PandasExecutionEngine):
             full_path = os.path.join(
diff --git a/great_expectations/execution_engine/sparkdf_execution_engine.py b/great_expectations/execution_engine/sparkdf_execution_engine.py
--- a/great_expectations/execution_engine/sparkdf_execution_engine.py
+++ b/great_expectations/execution_engine/sparkdf_execution_engine.py
@@ -2,7 +2,6 @@
 import datetime
 import hashlib
 import logging
-import os
 import uuid
 import warnings
 from functools import reduce
@@ -220,6 +219,14 @@ def get_batch_data_and_markers(
             }
         )
 
+        """
+        As documented in Azure DataConnector implementations, Pandas and Spark execution engines utilize separate path
+        formats for accessing Azure Blob Storage service.  However, Pandas and Spark execution engines utilize identical
+        path formats for accessing all other supported cloud storage services (AWS S3 and Google Cloud Storage).
+        Moreover, these formats (encapsulated in S3BatchSpec and GCSBatchSpec) extend PathBatchSpec (common to them).
+        Therefore, at the present time, all cases with the exception of Azure Blob Storage , are handled generically.
+        """
+
         batch_data: Any
         if isinstance(batch_spec, RuntimeDataBatchSpec):
             # batch_data != None is already checked when RuntimeDataBatchSpec is instantiated
@@ -261,9 +268,6 @@ def get_batch_data_and_markers(
                     """
                 )
 
-        elif isinstance(batch_spec, GCSBatchSpec):
-            raise NotImplementedError("Currently unsupported.")
-
         elif isinstance(batch_spec, PathBatchSpec):
             reader_method: str = batch_spec.reader_method
             reader_options: dict = batch_spec.reader_options or {}


Test patch:
diff --git a/tests/execution_engine/test_sparkdf_execution_engine.py b/tests/execution_engine/test_sparkdf_execution_engine.py
--- a/tests/execution_engine/test_sparkdf_execution_engine.py
+++ b/tests/execution_engine/test_sparkdf_execution_engine.py
@@ -10,6 +10,7 @@
 import great_expectations.exceptions as ge_exceptions
 from great_expectations.core.batch_spec import (
     AzureBatchSpec,
+    GCSBatchSpec,
     PathBatchSpec,
     RuntimeDataBatchSpec,
     S3BatchSpec,
@@ -681,6 +682,18 @@ def test_get_batch_empty_splitter_parquet(
     assert len(test_sparkdf.columns) == 2
 
 
+def test_get_batch_with_split_on_whole_table_runtime(
+    test_sparkdf, basic_spark_df_execution_engine
+):
+    test_sparkdf = basic_spark_df_execution_engine.get_batch_data(
+        RuntimeDataBatchSpec(
+            batch_data=test_sparkdf, splitter_method="_split_on_whole_table"
+        )
+    ).dataframe
+    assert test_sparkdf.count() == 120
+    assert len(test_sparkdf.columns) == 10
+
+
 def test_get_batch_with_split_on_whole_table_filesystem(
     test_folder_connection_path_csv, basic_spark_df_execution_engine
 ):
@@ -732,16 +745,78 @@ def mocked_reader_function(*args, **kwargs):
     assert len(test_sparkdf.columns) == 2
 
 
-def test_get_batch_with_split_on_whole_table_runtime(
-    test_sparkdf, basic_spark_df_execution_engine
+def test_get_batch_with_split_on_whole_table_azure(
+    spark_session, basic_spark_df_execution_engine
 ):
-    test_sparkdf = basic_spark_df_execution_engine.get_batch_data(
-        RuntimeDataBatchSpec(
-            batch_data=test_sparkdf, splitter_method="_split_on_whole_table"
+    # noinspection PyUnusedLocal
+    def mocked_get_reader_function(*args, **kwargs):
+        # noinspection PyUnusedLocal,PyShadowingNames
+        def mocked_reader_function(*args, **kwargs):
+            pd_df = pd.DataFrame({"a": [1, 2, 3, 4], "b": [2, 3, 4, None]})
+            df = spark_session.createDataFrame(
+                [
+                    tuple(
+                        None if isinstance(x, (float, int)) and np.isnan(x) else x
+                        for x in record.tolist()
+                    )
+                    for record in pd_df.to_records(index=False)
+                ],
+                pd_df.columns.tolist(),
+            )
+            return df
+
+        return mocked_reader_function
+
+    spark_engine = basic_spark_df_execution_engine
+    spark_engine._get_reader_fn = mocked_get_reader_function
+
+    test_sparkdf = spark_engine.get_batch_data(
+        AzureBatchSpec(
+            path="wasbs://test_container@test_account.blob.core.windows.net/test_dir/test_file.csv",
+            reader_method="csv",
+            reader_options={"header": True},
+            splitter_method="_split_on_whole_table",
         )
     ).dataframe
-    assert test_sparkdf.count() == 120
-    assert len(test_sparkdf.columns) == 10
+    assert test_sparkdf.count() == 4
+    assert len(test_sparkdf.columns) == 2
+
+
+def test_get_batch_with_split_on_whole_table_gcs(
+    spark_session, basic_spark_df_execution_engine
+):
+    # noinspection PyUnusedLocal
+    def mocked_get_reader_function(*args, **kwargs):
+        # noinspection PyUnusedLocal,PyShadowingNames
+        def mocked_reader_function(*args, **kwargs):
+            pd_df = pd.DataFrame({"a": [1, 2, 3, 4], "b": [2, 3, 4, None]})
+            df = spark_session.createDataFrame(
+                [
+                    tuple(
+                        None if isinstance(x, (float, int)) and np.isnan(x) else x
+                        for x in record.tolist()
+                    )
+                    for record in pd_df.to_records(index=False)
+                ],
+                pd_df.columns.tolist(),
+            )
+            return df
+
+        return mocked_reader_function
+
+    spark_engine = basic_spark_df_execution_engine
+    spark_engine._get_reader_fn = mocked_get_reader_function
+
+    test_sparkdf = spark_engine.get_batch_data(
+        GCSBatchSpec(
+            path="gcs://bucket/test/test.csv",
+            reader_method="csv",
+            reader_options={"header": True},
+            splitter_method="_split_on_whole_table",
+        )
+    ).dataframe
+    assert test_sparkdf.count() == 4
+    assert len(test_sparkdf.columns) == 2
 
 
 def test_get_batch_with_split_on_column_value(
@@ -1561,40 +1636,3 @@ def test_dataframe_property_given_loaded_batch(spark_session):
 
     # Ensuring Data not distorted
     assert engine.dataframe == df
-
-
-def test_get_batch_with_split_on_whole_table_azure(
-    spark_session, basic_spark_df_execution_engine
-):
-    # noinspection PyUnusedLocal
-    def mocked_get_reader_function(*args, **kwargs):
-        # noinspection PyUnusedLocal,PyShadowingNames
-        def mocked_reader_function(*args, **kwargs):
-            pd_df = pd.DataFrame({"a": [1, 2, 3, 4], "b": [2, 3, 4, None]})
-            df = spark_session.createDataFrame(
-                [
-                    tuple(
-                        None if isinstance(x, (float, int)) and np.isnan(x) else x
-                        for x in record.tolist()
-                    )
-                    for record in pd_df.to_records(index=False)
-                ],
-                pd_df.columns.tolist(),
-            )
-            return df
-
-        return mocked_reader_function
-
-    spark_engine = basic_spark_df_execution_engine
-    spark_engine._get_reader_fn = mocked_get_reader_function
-
-    test_sparkdf = spark_engine.get_batch_data(
-        AzureBatchSpec(
-            path="wasbs://test_container@test_account.blob.core.windows.net/test_dir/test_file.csv",
-            reader_method="csv",
-            reader_options={"header": True},
-            splitter_method="_split_on_whole_table",
-        )
-    ).dataframe
-    assert test_sparkdf.count() == 4
-    assert len(test_sparkdf.columns) == 2
diff --git a/tests/integration/docusaurus/connecting_to_your_data/cloud/azure/pandas/configured_python_example.py b/tests/integration/docusaurus/connecting_to_your_data/cloud/azure/pandas/configured_python_example.py
--- a/tests/integration/docusaurus/connecting_to_your_data/cloud/azure/pandas/configured_python_example.py
+++ b/tests/integration/docusaurus/connecting_to_your_data/cloud/azure/pandas/configured_python_example.py
@@ -42,11 +42,11 @@
 # In normal usage you'd set your path directly in the yaml above.
 datasource_config["execution_engine"]["azure_options"][
     "account_url"
-] = "superconductivetests.blob.core.windows.net"
+] = "superconductivetesting.blob.core.windows.net"
 datasource_config["execution_engine"]["azure_options"]["credential"] = CREDENTIAL
 datasource_config["data_connectors"]["configured_data_connector_name"]["azure_options"][
     "account_url"
-] = "superconductivetests.blob.core.windows.net"
+] = "superconductivetesting.blob.core.windows.net"
 datasource_config["data_connectors"]["configured_data_connector_name"]["azure_options"][
     "credential"
 ] = CREDENTIAL
diff --git a/tests/integration/docusaurus/connecting_to_your_data/cloud/azure/pandas/configured_yaml_example.py b/tests/integration/docusaurus/connecting_to_your_data/cloud/azure/pandas/configured_yaml_example.py
--- a/tests/integration/docusaurus/connecting_to_your_data/cloud/azure/pandas/configured_yaml_example.py
+++ b/tests/integration/docusaurus/connecting_to_your_data/cloud/azure/pandas/configured_yaml_example.py
@@ -44,7 +44,7 @@
     "<CONTAINER_PATH_TO_DATA>", "data/taxi_yellow_trip_data_samples/"
 )
 datasource_yaml = datasource_yaml.replace(
-    "<YOUR_ACCOUNT_URL>", "superconductivetests.blob.core.windows.net"
+    "<YOUR_ACCOUNT_URL>", "superconductivetesting.blob.core.windows.net"
 )
 datasource_yaml = datasource_yaml.replace("<YOUR_CREDENTIAL>", CREDENTIAL)
 
diff --git a/tests/integration/docusaurus/connecting_to_your_data/cloud/azure/spark/configured_python_example.py b/tests/integration/docusaurus/connecting_to_your_data/cloud/azure/spark/configured_python_example.py
--- a/tests/integration/docusaurus/connecting_to_your_data/cloud/azure/spark/configured_python_example.py
+++ b/tests/integration/docusaurus/connecting_to_your_data/cloud/azure/spark/configured_python_example.py
@@ -14,8 +14,9 @@
     "name": "my_azure_datasource",
     "class_name": "Datasource",
     "execution_engine": {
-        "class_name": "PandasExecutionEngine",
+        "class_name": "SparkDFExecutionEngine",
         "azure_options": {
+            "account_url": "<YOUR_ACCOUNT_URL>",
             "credential": "<YOUR_CREDENTIAL>",
         },
     },
@@ -23,6 +24,7 @@
         "configured_data_connector_name": {
             "class_name": "ConfiguredAssetAzureDataConnector",
             "azure_options": {
+                "account_url": "<YOUR_ACCOUNT_URL>",
                 "credential": "<YOUR_CREDENTIAL>",
             },
             "container": "<YOUR_CONTAINER>",
@@ -40,11 +42,11 @@
 # In normal usage you'd set your path directly in the yaml above.
 datasource_config["execution_engine"]["azure_options"][
     "account_url"
-] = "superconductivetests.blob.core.windows.net"
+] = "superconductivetesting.blob.core.windows.net"
 datasource_config["execution_engine"]["azure_options"]["credential"] = CREDENTIAL
 datasource_config["data_connectors"]["configured_data_connector_name"]["azure_options"][
     "account_url"
-] = "superconductivetests.blob.core.windows.net"
+] = "superconductivetesting.blob.core.windows.net"
 datasource_config["data_connectors"]["configured_data_connector_name"]["azure_options"][
     "credential"
 ] = CREDENTIAL
@@ -64,6 +66,7 @@
     datasource_name="my_azure_datasource",
     data_connector_name="configured_data_connector_name",
     data_asset_name="<YOUR_DATA_ASSET_NAME>",
+    batch_spec_passthrough={"reader_method": "csv", "reader_options": {"header": True}},
 )
 
 # Please note this override is only to provide good UX for docs and tests.
@@ -91,4 +94,4 @@
 assert len(batch_list) == 3
 
 batch: Batch = batch_list[0]
-assert batch.data.dataframe.shape[0] == 10000
+assert batch.data.dataframe.count() == 10000
diff --git a/tests/integration/docusaurus/connecting_to_your_data/cloud/azure/spark/configured_yaml_example.py b/tests/integration/docusaurus/connecting_to_your_data/cloud/azure/spark/configured_yaml_example.py
--- a/tests/integration/docusaurus/connecting_to_your_data/cloud/azure/spark/configured_yaml_example.py
+++ b/tests/integration/docusaurus/connecting_to_your_data/cloud/azure/spark/configured_yaml_example.py
@@ -16,11 +16,13 @@
 execution_engine:
     class_name: SparkDFExecutionEngine
     azure_options:
+        account_url: <YOUR_ACCOUNT_URL> # or `conn_str`
         credential: <YOUR_CREDENTIAL>
 data_connectors:
     configured_data_connector_name:
         class_name: ConfiguredAssetAzureDataConnector
         azure_options:
+            account_url: <YOUR_ACCOUNT_URL> # or `conn_str`
             credential: <YOUR_CREDENTIAL>
         container: <YOUR_AZURE_CONTAINER_HERE>
         name_starts_with: <CONTAINER_PATH_TO_DATA>
@@ -42,7 +44,7 @@
     "<CONTAINER_PATH_TO_DATA>", "data/taxi_yellow_trip_data_samples/"
 )
 datasource_yaml = datasource_yaml.replace(
-    "<YOUR_ACCOUNT_URL>", "superconductivetests.blob.core.windows.net"
+    "<YOUR_ACCOUNT_URL>", "superconductivetesting.blob.core.windows.net"
 )
 datasource_yaml = datasource_yaml.replace("<YOUR_CREDENTIAL>", CREDENTIAL)
 
@@ -55,6 +57,7 @@
     datasource_name="my_azure_datasource",
     data_connector_name="configured_data_connector_name",
     data_asset_name="<YOUR_DATA_ASSET_NAME>",
+    batch_spec_passthrough={"reader_method": "csv", "reader_options": {"header": True}},
 )
 
 # Please note this override is only to provide good UX for docs and tests.
@@ -83,4 +86,4 @@
 assert len(batch_list) == 3
 
 batch: Batch = batch_list[0]
-assert batch.data.dataframe.shape[0] == 10000
+assert batch.data.dataframe.count() == 10000
diff --git a/tests/integration/docusaurus/connecting_to_your_data/cloud/gcs/spark/inferred_and_runtime_python_example.py b/tests/integration/docusaurus/connecting_to_your_data/cloud/gcs/spark/inferred_and_runtime_python_example.py
new file mode 100644
--- /dev/null
+++ b/tests/integration/docusaurus/connecting_to_your_data/cloud/gcs/spark/inferred_and_runtime_python_example.py
@@ -0,0 +1,123 @@
+from typing import List
+
+from ruamel import yaml
+
+import great_expectations as ge
+from great_expectations.core.batch import Batch, BatchRequest, RuntimeBatchRequest
+from great_expectations.data_context import BaseDataContext
+from great_expectations.data_context.types.base import (
+    DataContextConfig,
+    InMemoryStoreBackendDefaults,
+)
+
+# NOTE: InMemoryStoreBackendDefaults SHOULD NOT BE USED in normal settings. You
+# may experience data loss as it persists nothing. It is used here for testing.
+# Please refer to docs to learn how to instantiate your DataContext.
+store_backend_defaults = InMemoryStoreBackendDefaults()
+data_context_config = DataContextConfig(
+    store_backend_defaults=store_backend_defaults,
+    checkpoint_store_name=store_backend_defaults.checkpoint_store_name,
+)
+context = BaseDataContext(project_config=data_context_config)
+
+datasource_config = {
+    "name": "my_gcs_datasource",
+    "class_name": "Datasource",
+    "execution_engine": {"class_name": "SparkDFExecutionEngine"},
+    "data_connectors": {
+        "default_runtime_data_connector_name": {
+            "class_name": "RuntimeDataConnector",
+            "batch_identifiers": ["default_identifier_name"],
+        },
+        "default_inferred_data_connector_name": {
+            "class_name": "InferredAssetGCSDataConnector",
+            "bucket_or_name": "<YOUR_GCS_BUCKET_HERE>",
+            "prefix": "<BUCKET_PATH_TO_DATA>",
+            "default_regex": {
+                "group_names": ["data_asset_name"],
+                "pattern": "(.*)\\.csv",
+            },
+        },
+    },
+}
+
+# Please note this override is only to provide good UX for docs and tests.
+# In normal usage you'd set your path directly in the yaml above.
+datasource_config["data_connectors"]["default_inferred_data_connector_name"][
+    "bucket_or_name"
+] = "superconductive-integration-tests"
+datasource_config["data_connectors"]["default_inferred_data_connector_name"][
+    "prefix"
+] = "data/taxi_yellow_trip_data_samples/"
+
+context.test_yaml_config(yaml.dump(datasource_config))
+
+context.add_datasource(**datasource_config)
+
+# Here is a RuntimeBatchRequest using a path to a single CSV file
+batch_request = RuntimeBatchRequest(
+    datasource_name="my_gcs_datasource",
+    data_connector_name="default_runtime_data_connector_name",
+    data_asset_name="<YOUR_MEANGINGFUL_NAME>",  # this can be anything that identifies this data_asset for you
+    runtime_parameters={"path": "<PATH_TO_YOUR_DATA_HERE>"},  # Add your GCS path here.
+    batch_identifiers={"default_identifier_name": "default_identifier"},
+)
+
+# Please note this override is only to provide good UX for docs and tests.
+# In normal usage you'd set your path directly in the BatchRequest above.
+batch_request.runtime_parameters[
+    "path"
+] = "gs://superconductive-public/data/taxi_yellow_trip_data_samples/yellow_trip_data_sample_2019-01.csv"
+
+context.create_expectation_suite(
+    expectation_suite_name="test_suite", overwrite_existing=True
+)
+validator = context.get_validator(
+    batch_request=batch_request, expectation_suite_name="test_suite"
+)
+print(validator.head())
+
+# NOTE: The following code is only for testing and can be ignored by users.
+assert isinstance(validator, ge.validator.validator.Validator)
+
+# Here is a BatchRequest naming a data_asset
+batch_request = BatchRequest(
+    datasource_name="my_gcs_datasource",
+    data_connector_name="default_inferred_data_connector_name",
+    data_asset_name="<YOUR_DATA_ASSET_NAME>",
+    batch_spec_passthrough={"reader_method": "csv", "reader_options": {"header": True}},
+)
+
+# Please note this override is only to provide good UX for docs and tests.
+# In normal usage you'd set your data asset name directly in the BatchRequest above.
+batch_request.data_asset_name = (
+    "data/taxi_yellow_trip_data_samples/yellow_trip_data_sample_2019-01"
+)
+
+context.create_expectation_suite(
+    expectation_suite_name="test_suite", overwrite_existing=True
+)
+validator = context.get_validator(
+    batch_request=batch_request, expectation_suite_name="test_suite"
+)
+print(validator.head())
+
+# NOTE: The following code is only for testing and can be ignored by users.
+assert isinstance(validator, ge.validator.validator.Validator)
+assert [ds["name"] for ds in context.list_datasources()] == ["my_gcs_datasource"]
+assert set(
+    context.get_available_data_asset_names()["my_gcs_datasource"][
+        "default_inferred_data_connector_name"
+    ]
+) == {
+    "data/taxi_yellow_trip_data_samples/yellow_trip_data_sample_2019-01",
+    "data/taxi_yellow_trip_data_samples/yellow_trip_data_sample_2019-02",
+    "data/taxi_yellow_trip_data_samples/yellow_trip_data_sample_2019-03",
+}
+
+
+batch_list: List[Batch] = context.get_batch_list(batch_request=batch_request)
+assert len(batch_list) == 1
+
+batch: Batch = batch_list[0]
+assert batch.data.dataframe.count() == 10000
diff --git a/tests/integration/docusaurus/connecting_to_your_data/cloud/gcs/spark/inferred_and_runtime_yaml_example.py b/tests/integration/docusaurus/connecting_to_your_data/cloud/gcs/spark/inferred_and_runtime_yaml_example.py
new file mode 100644
--- /dev/null
+++ b/tests/integration/docusaurus/connecting_to_your_data/cloud/gcs/spark/inferred_and_runtime_yaml_example.py
@@ -0,0 +1,122 @@
+from typing import List
+
+from ruamel import yaml
+
+import great_expectations as ge
+from great_expectations.core.batch import Batch, BatchRequest, RuntimeBatchRequest
+from great_expectations.data_context import BaseDataContext
+from great_expectations.data_context.types.base import (
+    DataContextConfig,
+    InMemoryStoreBackendDefaults,
+)
+
+# NOTE: InMemoryStoreBackendDefaults SHOULD NOT BE USED in normal settings. You
+# may experience data loss as it persists nothing. It is used here for testing.
+# Please refer to docs to learn how to instantiate your DataContext.
+store_backend_defaults = InMemoryStoreBackendDefaults()
+data_context_config = DataContextConfig(
+    store_backend_defaults=store_backend_defaults,
+    checkpoint_store_name=store_backend_defaults.checkpoint_store_name,
+)
+context = BaseDataContext(project_config=data_context_config)
+
+datasource_yaml = fr"""
+name: my_gcs_datasource
+class_name: Datasource
+execution_engine:
+    class_name: SparkDFExecutionEngine
+data_connectors:
+    default_runtime_data_connector_name:
+        class_name: RuntimeDataConnector
+        batch_identifiers:
+            - default_identifier_name
+    default_inferred_data_connector_name:
+        class_name: InferredAssetGCSDataConnector
+        bucket_or_name: <YOUR_GCS_BUCKET_HERE>
+        prefix: <BUCKET_PATH_TO_DATA>
+        default_regex:
+            group_names:
+                - data_asset_name
+            pattern: (.*)\.csv
+"""
+
+# Please note this override is only to provide good UX for docs and tests.
+# In normal usage you'd set your path directly in the yaml above.
+datasource_yaml = datasource_yaml.replace(
+    "<YOUR_GCS_BUCKET_HERE>", "superconductive-integration-tests"
+)
+datasource_yaml = datasource_yaml.replace(
+    "<BUCKET_PATH_TO_DATA>", "data/taxi_yellow_trip_data_samples/"
+)
+
+context.test_yaml_config(datasource_yaml)
+
+context.add_datasource(**yaml.load(datasource_yaml))
+
+# Here is a RuntimeBatchRequest using a path to a single CSV file
+batch_request = RuntimeBatchRequest(
+    datasource_name="my_gcs_datasource",
+    data_connector_name="default_runtime_data_connector_name",
+    data_asset_name="<YOUR_MEANGINGFUL_NAME>",  # this can be anything that identifies this data_asset for you
+    runtime_parameters={"path": "<PATH_TO_YOUR_DATA_HERE>"},  # Add your GCS path here.
+    batch_identifiers={"default_identifier_name": "default_identifier"},
+)
+
+# Please note this override is only to provide good UX for docs and tests.
+# In normal usage you'd set your path directly in the BatchRequest above.
+batch_request.runtime_parameters[
+    "path"
+] = "gs://superconductive-public/data/taxi_yellow_trip_data_samples/yellow_trip_data_sample_2019-01.csv"
+
+context.create_expectation_suite(
+    expectation_suite_name="test_suite", overwrite_existing=True
+)
+validator = context.get_validator(
+    batch_request=batch_request, expectation_suite_name="test_suite"
+)
+print(validator.head())
+
+# NOTE: The following code is only for testing and can be ignored by users.
+assert isinstance(validator, ge.validator.validator.Validator)
+
+# Here is a BatchRequest naming a data_asset
+batch_request = BatchRequest(
+    datasource_name="my_gcs_datasource",
+    data_connector_name="default_inferred_data_connector_name",
+    data_asset_name="<YOUR_DATA_ASSET_NAME>",
+    batch_spec_passthrough={"reader_method": "csv", "reader_options": {"header": True}},
+)
+
+# Please note this override is only to provide good UX for docs and tests.
+# In normal usage you'd set your data asset name directly in the BatchRequest above.
+batch_request.data_asset_name = (
+    "data/taxi_yellow_trip_data_samples/yellow_trip_data_sample_2019-01"
+)
+
+context.create_expectation_suite(
+    expectation_suite_name="test_suite", overwrite_existing=True
+)
+validator = context.get_validator(
+    batch_request=batch_request, expectation_suite_name="test_suite"
+)
+print(validator.head())
+
+# NOTE: The following code is only for testing and can be ignored by users.
+assert isinstance(validator, ge.validator.validator.Validator)
+assert [ds["name"] for ds in context.list_datasources()] == ["my_gcs_datasource"]
+assert set(
+    context.get_available_data_asset_names()["my_gcs_datasource"][
+        "default_inferred_data_connector_name"
+    ]
+) == {
+    "data/taxi_yellow_trip_data_samples/yellow_trip_data_sample_2019-01",
+    "data/taxi_yellow_trip_data_samples/yellow_trip_data_sample_2019-02",
+    "data/taxi_yellow_trip_data_samples/yellow_trip_data_sample_2019-03",
+}
+
+
+batch_list: List[Batch] = context.get_batch_list(batch_request=batch_request)
+assert len(batch_list) == 1
+
+batch: Batch = batch_list[0]
+assert batch.data.dataframe.count() == 10000
diff --git a/tests/integration/docusaurus/connecting_to_your_data/cloud/gcs/spark/python_example.py b/tests/integration/docusaurus/connecting_to_your_data/cloud/gcs/spark/python_example.py
deleted file mode 100644
diff --git a/tests/integration/docusaurus/connecting_to_your_data/cloud/gcs/spark/yaml_example.py b/tests/integration/docusaurus/connecting_to_your_data/cloud/gcs/spark/yaml_example.py
deleted file mode 100644
diff --git a/tests/integration/docusaurus/connecting_to_your_data/cloud/s3/pandas/python_example.py b/tests/integration/docusaurus/connecting_to_your_data/cloud/s3/pandas/inferred_and_runtime_python_example.py
similarity index 100%
rename from tests/integration/docusaurus/connecting_to_your_data/cloud/s3/pandas/python_example.py
rename to tests/integration/docusaurus/connecting_to_your_data/cloud/s3/pandas/inferred_and_runtime_python_example.py
diff --git a/tests/integration/docusaurus/connecting_to_your_data/cloud/s3/pandas/yaml_example.py b/tests/integration/docusaurus/connecting_to_your_data/cloud/s3/pandas/inferred_and_runtime_yaml_example.py
similarity index 100%
rename from tests/integration/docusaurus/connecting_to_your_data/cloud/s3/pandas/yaml_example.py
rename to tests/integration/docusaurus/connecting_to_your_data/cloud/s3/pandas/inferred_and_runtime_yaml_example.py
diff --git a/tests/integration/docusaurus/connecting_to_your_data/cloud/s3/spark/python_example.py b/tests/integration/docusaurus/connecting_to_your_data/cloud/s3/spark/inferred_and_runtime_python_example.py
similarity index 97%
rename from tests/integration/docusaurus/connecting_to_your_data/cloud/s3/spark/python_example.py
rename to tests/integration/docusaurus/connecting_to_your_data/cloud/s3/spark/inferred_and_runtime_python_example.py
--- a/tests/integration/docusaurus/connecting_to_your_data/cloud/s3/spark/python_example.py
+++ b/tests/integration/docusaurus/connecting_to_your_data/cloud/s3/spark/inferred_and_runtime_python_example.py
@@ -85,6 +85,7 @@
     datasource_name="my_s3_datasource",
     data_connector_name="default_inferred_data_connector_name",
     data_asset_name="<YOUR_DATA_ASSET_NAME>",
+    batch_spec_passthrough={"reader_method": "csv", "reader_options": {"header": True}},
 )
 
 # Please note this override is only to provide good UX for docs and tests.
@@ -119,4 +120,4 @@
 assert len(batch_list) == 1
 
 batch: Batch = batch_list[0]
-assert batch.data.dataframe.shape[0] == 10000
+assert batch.data.dataframe.count() == 10000
diff --git a/tests/integration/docusaurus/connecting_to_your_data/cloud/s3/spark/yaml_example.py b/tests/integration/docusaurus/connecting_to_your_data/cloud/s3/spark/inferred_and_runtime_yaml_example.py
similarity index 97%
rename from tests/integration/docusaurus/connecting_to_your_data/cloud/s3/spark/yaml_example.py
rename to tests/integration/docusaurus/connecting_to_your_data/cloud/s3/spark/inferred_and_runtime_yaml_example.py
--- a/tests/integration/docusaurus/connecting_to_your_data/cloud/s3/spark/yaml_example.py
+++ b/tests/integration/docusaurus/connecting_to_your_data/cloud/s3/spark/inferred_and_runtime_yaml_example.py
@@ -84,6 +84,7 @@
     datasource_name="my_s3_datasource",
     data_connector_name="default_inferred_data_connector_name",
     data_asset_name="<YOUR_DATA_ASSET_NAME>",
+    batch_spec_passthrough={"reader_method": "csv", "reader_options": {"header": True}},
 )
 
 # Please note this override is only to provide good UX for docs and tests.
@@ -118,4 +119,4 @@
 assert len(batch_list) == 1
 
 batch: Batch = batch_list[0]
-assert batch.data.dataframe.shape[0] == 10000
+assert batch.data.dataframe.count() == 10000
diff --git a/tests/integration/test_script_runner.py b/tests/integration/test_script_runner.py
--- a/tests/integration/test_script_runner.py
+++ b/tests/integration/test_script_runner.py
@@ -37,6 +37,7 @@ class BackendDependencies(enum.Enum):
         "util_script": "tests/integration/docusaurus/connecting_to_your_data/database/util.py",
         "extra_backend_dependencies": BackendDependencies.BIGQUERY,
     },
+    # TODO: <Alex>Until Spark in Azure Pipelines is enabled, be sure to uncomment and run Spark tests locally for all available Cloud DataConnector implementations before any changes are committed.</Alex>
     # Azure
     {
         "user_flow_script": "tests/integration/docusaurus/connecting_to_your_data/cloud/azure/pandas/configured_yaml_example.py",
@@ -46,6 +47,7 @@ class BackendDependencies(enum.Enum):
         "user_flow_script": "tests/integration/docusaurus/connecting_to_your_data/cloud/azure/pandas/configured_python_example.py",
         "data_context_dir": "tests/integration/fixtures/no_datasources/great_expectations",
     },
+    # TODO: <Alex>ALEX -- uncomment next two (2) tests once "InferredAssetAzureDataConnector" is implemented.</Alex>
     # {
     #     "user_flow_script": "tests/integration/docusaurus/connecting_to_your_data/cloud/azure/pandas/inferred_and_runtime_yaml_example.py",
     #     "data_context_dir": "tests/integration/fixtures/no_datasources/great_expectations",
@@ -54,6 +56,24 @@ class BackendDependencies(enum.Enum):
     #     "user_flow_script": "tests/integration/docusaurus/connecting_to_your_data/cloud/azure/pandas/inferred_and_runtime_python_example.py",
     #     "data_context_dir": "tests/integration/fixtures/no_datasources/great_expectations",
     # },
+    # TODO: <Alex>ALEX -- uncomment next two (2) tests once Spark in Azure Pipelines is enabled.</Alex>
+    # {
+    #     "user_flow_script": "tests/integration/docusaurus/connecting_to_your_data/cloud/azure/spark/configured_yaml_example.py",
+    #     "data_context_dir": "tests/integration/fixtures/no_datasources/great_expectations",
+    # },
+    # {
+    #     "user_flow_script": "tests/integration/docusaurus/connecting_to_your_data/cloud/azure/spark/configured_python_example.py",
+    #     "data_context_dir": "tests/integration/fixtures/no_datasources/great_expectations",
+    # },
+    # TODO: <Alex>ALEX -- uncomment next two (2) tests once "InferredAssetAzureDataConnector" is implemented and Spark in Azure Pipelines is enabled.</Alex>
+    # {
+    #     "user_flow_script": "tests/integration/docusaurus/connecting_to_your_data/cloud/azure/spark/inferred_and_runtime_yaml_example.py",
+    #     "data_context_dir": "tests/integration/fixtures/no_datasources/great_expectations",
+    # },
+    # {
+    #     "user_flow_script": "tests/integration/docusaurus/connecting_to_your_data/cloud/azure/spark/inferred_and_runtime_python_example.py",
+    #     "data_context_dir": "tests/integration/fixtures/no_datasources/great_expectations",
+    # },
     # GCS
     {
         "user_flow_script": "tests/integration/docusaurus/connecting_to_your_data/cloud/gcs/pandas/configured_yaml_example.py",
@@ -71,22 +91,73 @@ class BackendDependencies(enum.Enum):
         "user_flow_script": "tests/integration/docusaurus/connecting_to_your_data/cloud/gcs/pandas/inferred_and_runtime_python_example.py",
         "data_context_dir": "tests/integration/fixtures/no_datasources/great_expectations",
     },
+    # TODO: <Alex>ALEX -- Implement GCS Configured YAML Example</Alex>
+    # TODO: <Alex>ALEX -- uncomment next test once Spark in Azure Pipelines is enabled and GCS Configured YAML Example is implemented.</Alex>
+    # {
+    #     "user_flow_script": "tests/integration/docusaurus/connecting_to_your_data/cloud/gcs/spark/configured_yaml_example.py",
+    #     "data_context_dir": "tests/integration/fixtures/no_datasources/great_expectations",
+    # },
+    # TODO: <Alex>ALEX -- Implement GCS Configured Python Example</Alex>
+    # TODO: <Alex>ALEX -- uncomment next test once Spark in Azure Pipelines is enabled and GCS Configured Python Example is implemented.</Alex>
+    # {
+    #     "user_flow_script": "tests/integration/docusaurus/connecting_to_your_data/cloud/gcs/spark/configured_python_example.py",
+    #     "data_context_dir": "tests/integration/fixtures/no_datasources/great_expectations",
+    # },
+    # TODO: <Alex>ALEX -- uncomment next two (2) tests once Spark in Azure Pipelines is enabled.</Alex>
     # {
-    #     "user_flow_script": "tests/integration/docusaurus/connecting_to_your_data/cloud/s3/pandas/yaml_example.py",
+    #     "user_flow_script": "tests/integration/docusaurus/connecting_to_your_data/cloud/gcs/spark/inferred_and_runtime_yaml_example.py",
     #     "data_context_dir": "tests/integration/fixtures/no_datasources/great_expectations",
     # },
     # {
-    #     "user_flow_script": "tests/integration/docusaurus/connecting_to_your_data/cloud/s3/pandas/python_example.py",
+    #     "user_flow_script": "tests/integration/docusaurus/connecting_to_your_data/cloud/gcs/spark/inferred_and_runtime_python_example.py",
     #     "data_context_dir": "tests/integration/fixtures/no_datasources/great_expectations",
     # },
+    # S3
+    # TODO: <Alex>ALEX -- uncomment all S3 tests once S3 testing in Azure Pipelines is re-enabled and items for specific tests below are addressed.</Alex>
+    # TODO: <Alex>ALEX -- Implement S3 Configured YAML Example</Alex>
+    # TODO: <Alex>ALEX -- uncomment next test once S3 Configured YAML Example is implemented.</Alex>
+    # {
+    #     "user_flow_script": "tests/integration/docusaurus/connecting_to_your_data/cloud/s3/pandas/configured_yaml_example.py",
+    #     "data_context_dir": "tests/integration/fixtures/no_datasources/great_expectations",
+    # },
+    # TODO: <Alex>ALEX -- Implement S3 Configured Python Example</Alex>
+    # TODO: <Alex>ALEX -- uncomment next test once S3 Configured Python Example is implemented.</Alex>
+    # {
+    #     "user_flow_script": "tests/integration/docusaurus/connecting_to_your_data/cloud/s3/pandas/configured_python_example.py",
+    #     "data_context_dir": "tests/integration/fixtures/no_datasources/great_expectations",
+    # },
+    # TODO: <Alex>ALEX -- uncomment next two (2) tests once S3 testing in Azure Pipelines is re-enabled.</Alex>
+    # {
+    #     "user_flow_script": "tests/integration/docusaurus/connecting_to_your_data/cloud/s3/pandas/inferred_and_runtime_yaml_example.py",
+    #     "data_context_dir": "tests/integration/fixtures/no_datasources/great_expectations",
+    # },
+    # {
+    #     "user_flow_script": "tests/integration/docusaurus/connecting_to_your_data/cloud/s3/pandas/inferred_and_runtime_python_example.py",
+    #     "data_context_dir": "tests/integration/fixtures/no_datasources/great_expectations",
+    # },
+    # TODO: <Alex>ALEX -- Implement S3 Configured YAML Example</Alex>
+    # TODO: <Alex>ALEX -- uncomment next test once Spark in Azure Pipelines is enabled and S3 Configured YAML Example is implemented.</Alex>
+    # {
+    #     "user_flow_script": "tests/integration/docusaurus/connecting_to_your_data/cloud/s3/spark/configured_yaml_example.py",
+    #     "extra_backend_dependencies": BackendDependencies.SPARK,
+    # },
+    # TODO: <Alex>ALEX -- Implement S3 Configured Python Example</Alex>
+    # TODO: <Alex>ALEX -- uncomment next test once Spark in Azure Pipelines is enabled and S3 Configured Python Example is implemented.</Alex>
+    # {
+    #     "user_flow_script": "tests/integration/docusaurus/connecting_to_your_data/cloud/s3/spark/configured_python_example.py",
+    #     "extra_backend_dependencies": BackendDependencies.SPARK,
+    # },
+    # TODO: <Alex>ALEX -- uncomment next two (2) tests once Spark in Azure Pipelines is enabled.</Alex>
     # {
-    #     "user_flow_script": "tests/integration/docusaurus/connecting_to_your_data/cloud/s3/spark/yaml_example.py",
+    #     "user_flow_script": "tests/integration/docusaurus/connecting_to_your_data/cloud/s3/spark/inferred_and_runtime_yaml_example.py",
     #     "extra_backend_dependencies": BackendDependencies.SPARK,
     # },
     # {
-    #     "user_flow_script": "tests/integration/docusaurus/connecting_to_your_data/cloud/s3/spark/python_example.py",
+    #     "user_flow_script": "tests/integration/docusaurus/connecting_to_your_data/cloud/s3/spark/inferred_and_runtime_python_example.py",
     #     "extra_backend_dependencies": BackendDependencies.SPARK,
     # },
+    # Redshift
+    # TODO: <Alex>ALEX: Rename test modules to include "configured" and "inferred_and_runtime" suffixes in names.</Alex>
     # {
     #     "user_flow_script": "tests/integration/docusaurus/connecting_to_your_data/database/redshift_python_example.py",
     #     "data_context_dir": "tests/integration/fixtures/no_datasources/great_expectations",