diff --git a/create_bq_tables.ipynb b/create_bq_tables.ipynb index 9c1f821..1edfc9a 100644 --- a/create_bq_tables.ipynb +++ b/create_bq_tables.ipynb @@ -10,7 +10,7 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": 3, "id": "24c29de1-76dd-4574-ac41-f702016a48ed", "metadata": {}, "outputs": [ @@ -25,7 +25,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "Waiting on bqjob_r437832d57d68de03_0000018bda760bc8_1 ... (4s) Current status: DONE \n" + "Waiting on bqjob_ree5454c8f84a40a_0000018c1c612c1d_1 ... (4s) Current status: DONE \n" ] }, { @@ -39,7 +39,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "Waiting on bqjob_r5c5c7815a20d04bc_0000018bda762730_1 ... (2s) Current status: DONE \n" + "Waiting on bqjob_r1fb15f9391984c2d_0000018c1c6147a8_1 ... (3s) Current status: DONE \n" ] }, { @@ -53,7 +53,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "Waiting on bqjob_r7f7904794e836ed3_0000018bda763a3f_1 ... (4s) Current status: DONE \n" + "Waiting on bqjob_r127d33cec7d892f4_0000018c1c615e7b_1 ... (3s) Current status: DONE \n" ] }, { @@ -67,7 +67,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "Waiting on bqjob_r70332df88fd21e9c_0000018bda76550c_1 ... (3s) Current status: DONE \n" + "Waiting on bqjob_r91ea67eb753b684_0000018c1c617585_1 ... (3s) Current status: DONE \n" ] }, { @@ -81,7 +81,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "Waiting on bqjob_r6b92ee689f011b8f_0000018bda766b9e_1 ... (5s) Current status: DONE \n" + "Waiting on bqjob_r3ff4aa25be604e5f_0000018c1c618c92_1 ... (4s) Current status: DONE \n" ] }, { @@ -95,7 +95,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "Waiting on bqjob_r396e8a956fe2afb_0000018bda768ad1_1 ... (14s) Current status: DONE \n" + "Waiting on bqjob_r33cd8011d68c1058_0000018c1c61a789_1 ... (14s) Current status: DONE \n" ] }, { @@ -109,7 +109,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "Waiting on bqjob_r4d4c4ae64b77786d_0000018bda76cebf_1 ... (14s) Current status: DONE \n" + "Waiting on bqjob_r24568683d6f2a722_0000018c1c61eb11_1 ... (134s) Current status: DONE \n" ] }, { @@ -123,7 +123,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "Waiting on bqjob_r580e35676ff43a38_0000018bda77125d_1 ... (22s) Current status: DONE \n" + "Waiting on bqjob_r123d602acce547c9_0000018c1c640291_1 ... (23s) Current status: DONE \n" ] }, { @@ -137,7 +137,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "Waiting on bqjob_r730d35da7bd6d21d_0000018bda7774f4_1 ... (22s) Current status: DONE \n" + "Waiting on bqjob_r55d21b6694e2e603_0000018c1c646673_1 ... (23s) Current status: DONE \n" ] }, { @@ -151,7 +151,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "Waiting on bqjob_r26148a34bbf177c9_0000018bda77d7a8_1 ... (22s) Current status: DONE \n" + "Waiting on bqjob_r46ac7ffca55cbb3b_0000018c1c64ca21_1 ... (22s) Current status: DONE \n" ] } ], @@ -171,7 +171,7 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 4, "id": "8d4c7418-8481-427c-8097-6e7dae4058d4", "metadata": {}, "outputs": [ @@ -179,7 +179,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "Waiting on bqjob_r49f1edd383a29152_0000018bda826616_1 ... (2s) Current status: DONE \n" + "Waiting on bqjob_r58ef9bd81b81ca11_0000018c1c652db0_1 ... (2s) Current status: DONE \n" ] } ], diff --git a/eda_2020.ipynb b/eda_2020.ipynb deleted file mode 100644 index a5c6376..0000000 --- a/eda_2020.ipynb +++ /dev/null @@ -1,934 +0,0 @@ -{ - "cells": [ - { - "cell_type": "code", - "execution_count": 1, - "id": "201288da-86ac-4db0-a56b-4d75e26e1753", - "metadata": {}, - "outputs": [], - "source": [ - "from pyspark.sql import SparkSession\n", - "from pyspark.sql import functions as F\n", - "\n", - "import matplotlib.pyplot as plt\n", - "%matplotlib inline" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "id": "3443992c-4530-48f2-a133-fb1dacf4b84f", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "[('spark.stage.maxConsecutiveAttempts', '10'),\n", - " ('spark.dynamicAllocation.minExecutors', '1'),\n", - " ('spark.eventLog.enabled', 'true'),\n", - " ('spark.submit.pyFiles',\n", - " '/root/.ivy2/jars/com.johnsnowlabs.nlp_spark-nlp_2.12-4.4.0.jar,/root/.ivy2/jars/graphframes_graphframes-0.8.2-spark3.1-s_2.12.jar,/root/.ivy2/jars/com.typesafe_config-1.4.2.jar,/root/.ivy2/jars/org.rocksdb_rocksdbjni-6.29.5.jar,/root/.ivy2/jars/com.amazonaws_aws-java-sdk-bundle-1.11.828.jar,/root/.ivy2/jars/com.github.universal-automata_liblevenshtein-3.0.0.jar,/root/.ivy2/jars/com.google.cloud_google-cloud-storage-2.16.0.jar,/root/.ivy2/jars/com.navigamez_greex-1.0.jar,/root/.ivy2/jars/com.johnsnowlabs.nlp_tensorflow-cpu_2.12-0.4.4.jar,/root/.ivy2/jars/it.unimi.dsi_fastutil-7.0.12.jar,/root/.ivy2/jars/org.projectlombok_lombok-1.16.8.jar,/root/.ivy2/jars/com.google.guava_guava-31.1-jre.jar,/root/.ivy2/jars/com.google.guava_failureaccess-1.0.1.jar,/root/.ivy2/jars/com.google.guava_listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar,/root/.ivy2/jars/com.google.errorprone_error_prone_annotations-2.16.jar,/root/.ivy2/jars/com.google.j2objc_j2objc-annotations-1.3.jar,/root/.ivy2/jars/com.google.http-client_google-http-client-1.42.3.jar,/root/.ivy2/jars/io.opencensus_opencensus-contrib-http-util-0.31.1.jar,/root/.ivy2/jars/com.google.http-client_google-http-client-jackson2-1.42.3.jar,/root/.ivy2/jars/com.google.http-client_google-http-client-gson-1.42.3.jar,/root/.ivy2/jars/com.google.api-client_google-api-client-2.1.1.jar,/root/.ivy2/jars/commons-codec_commons-codec-1.15.jar,/root/.ivy2/jars/com.google.oauth-client_google-oauth-client-1.34.1.jar,/root/.ivy2/jars/com.google.http-client_google-http-client-apache-v2-1.42.3.jar,/root/.ivy2/jars/com.google.apis_google-api-services-storage-v1-rev20220705-2.0.0.jar,/root/.ivy2/jars/com.google.code.gson_gson-2.10.jar,/root/.ivy2/jars/com.google.cloud_google-cloud-core-2.9.0.jar,/root/.ivy2/jars/com.google.auto.value_auto-value-annotations-1.10.1.jar,/root/.ivy2/jars/com.google.cloud_google-cloud-core-http-2.9.0.jar,/root/.ivy2/jars/com.google.http-client_google-http-client-appengine-1.42.3.jar,/root/.ivy2/jars/com.google.api_gax-httpjson-0.105.1.jar,/root/.ivy2/jars/com.google.cloud_google-cloud-core-grpc-2.9.0.jar,/root/.ivy2/jars/io.grpc_grpc-core-1.51.0.jar,/root/.ivy2/jars/com.google.api_gax-2.20.1.jar,/root/.ivy2/jars/com.google.api_gax-grpc-2.20.1.jar,/root/.ivy2/jars/io.grpc_grpc-alts-1.51.0.jar,/root/.ivy2/jars/io.grpc_grpc-grpclb-1.51.0.jar,/root/.ivy2/jars/org.conscrypt_conscrypt-openjdk-uber-2.5.2.jar,/root/.ivy2/jars/io.grpc_grpc-protobuf-1.51.0.jar,/root/.ivy2/jars/com.google.auth_google-auth-library-credentials-1.13.0.jar,/root/.ivy2/jars/com.google.auth_google-auth-library-oauth2-http-1.13.0.jar,/root/.ivy2/jars/com.google.api_api-common-2.2.2.jar,/root/.ivy2/jars/javax.annotation_javax.annotation-api-1.3.2.jar,/root/.ivy2/jars/io.opencensus_opencensus-api-0.31.1.jar,/root/.ivy2/jars/io.grpc_grpc-context-1.51.0.jar,/root/.ivy2/jars/com.google.api.grpc_proto-google-iam-v1-1.6.22.jar,/root/.ivy2/jars/com.google.protobuf_protobuf-java-3.21.10.jar,/root/.ivy2/jars/com.google.protobuf_protobuf-java-util-3.21.10.jar,/root/.ivy2/jars/com.google.api.grpc_proto-google-common-protos-2.11.0.jar,/root/.ivy2/jars/org.threeten_threetenbp-1.6.4.jar,/root/.ivy2/jars/com.google.api.grpc_proto-google-cloud-storage-v2-2.16.0-alpha.jar,/root/.ivy2/jars/com.google.api.grpc_grpc-google-cloud-storage-v2-2.16.0-alpha.jar,/root/.ivy2/jars/com.google.api.grpc_gapic-google-cloud-storage-v2-2.16.0-alpha.jar,/root/.ivy2/jars/com.fasterxml.jackson.core_jackson-core-2.14.1.jar,/root/.ivy2/jars/com.google.code.findbugs_jsr305-3.0.2.jar,/root/.ivy2/jars/io.grpc_grpc-api-1.51.0.jar,/root/.ivy2/jars/io.grpc_grpc-auth-1.51.0.jar,/root/.ivy2/jars/io.grpc_grpc-stub-1.51.0.jar,/root/.ivy2/jars/org.checkerframework_checker-qual-3.28.0.jar,/root/.ivy2/jars/com.google.api.grpc_grpc-google-iam-v1-1.6.22.jar,/root/.ivy2/jars/io.grpc_grpc-protobuf-lite-1.51.0.jar,/root/.ivy2/jars/com.google.android_annotations-4.1.1.4.jar,/root/.ivy2/jars/org.codehaus.mojo_animal-sniffer-annotations-1.22.jar,/root/.ivy2/jars/io.grpc_grpc-netty-shaded-1.51.0.jar,/root/.ivy2/jars/io.perfmark_perfmark-api-0.26.0.jar,/root/.ivy2/jars/io.grpc_grpc-googleapis-1.51.0.jar,/root/.ivy2/jars/io.grpc_grpc-xds-1.51.0.jar,/root/.ivy2/jars/io.opencensus_opencensus-proto-0.2.0.jar,/root/.ivy2/jars/io.grpc_grpc-services-1.51.0.jar,/root/.ivy2/jars/com.google.re2j_re2j-1.6.jar,/root/.ivy2/jars/dk.brics.automaton_automaton-1.11-8.jar,/root/.ivy2/jars/org.slf4j_slf4j-api-1.7.16.jar'),\n", - " ('spark.dataproc.sql.joinConditionReorder.enabled', 'true'),\n", - " ('spark.history.fs.logDirectory',\n", - " 'gs://dataproc-temp-us-central1-635155370842-uzamlpgc/913fbcd2-8c32-41c5-b3b1-e2206e964691/spark-job-history'),\n", - " ('spark.kryoserializer.buffer.max', '2000M'),\n", - " ('spark.serializer', 'org.apache.spark.serializer.KryoSerializer'),\n", - " ('spark.dataproc.sql.local.rank.pushdown.enabled', 'true'),\n", - " ('spark.driver.maxResultSize', '0'),\n", - " ('spark.yarn.unmanagedAM.enabled', 'true'),\n", - " ('spark.sql.autoBroadcastJoinThreshold', '43m'),\n", - " ('spark.ui.filters',\n", - " 'org.apache.hadoop.yarn.server.webproxy.amfilter.AmIpFilter'),\n", - " ('spark.yarn.historyServer.address',\n", - " 'hub-msca-bdp-dphub-students-ridhi-m:18080'),\n", - " ('spark.metrics.namespace',\n", - " 'app_name:${spark.app.name}.app_id:${spark.app.id}'),\n", - " ('spark.executor.memory', '4g'),\n", - " ('spark.dataproc.sql.optimizer.leftsemijoin.conversion.enabled', 'true'),\n", - " ('spark.hadoop.hive.execution.engine', 'mr'),\n", - " ('spark.driver.port', '40023'),\n", - " ('spark.executor.id', 'driver'),\n", - " ('spark.hadoop.mapreduce.fileoutputcommitter.algorithm.version', '2'),\n", - " ('spark.dynamicAllocation.maxExecutors', '10000'),\n", - " ('spark.yarn.dist.pyFiles',\n", - " 'file:///root/.ivy2/jars/com.johnsnowlabs.nlp_spark-nlp_2.12-4.4.0.jar,file:///root/.ivy2/jars/graphframes_graphframes-0.8.2-spark3.1-s_2.12.jar,file:///root/.ivy2/jars/com.typesafe_config-1.4.2.jar,file:///root/.ivy2/jars/org.rocksdb_rocksdbjni-6.29.5.jar,file:///root/.ivy2/jars/com.amazonaws_aws-java-sdk-bundle-1.11.828.jar,file:///root/.ivy2/jars/com.github.universal-automata_liblevenshtein-3.0.0.jar,file:///root/.ivy2/jars/com.google.cloud_google-cloud-storage-2.16.0.jar,file:///root/.ivy2/jars/com.navigamez_greex-1.0.jar,file:///root/.ivy2/jars/com.johnsnowlabs.nlp_tensorflow-cpu_2.12-0.4.4.jar,file:///root/.ivy2/jars/it.unimi.dsi_fastutil-7.0.12.jar,file:///root/.ivy2/jars/org.projectlombok_lombok-1.16.8.jar,file:///root/.ivy2/jars/com.google.guava_guava-31.1-jre.jar,file:///root/.ivy2/jars/com.google.guava_failureaccess-1.0.1.jar,file:///root/.ivy2/jars/com.google.guava_listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar,file:///root/.ivy2/jars/com.google.errorprone_error_prone_annotations-2.16.jar,file:///root/.ivy2/jars/com.google.j2objc_j2objc-annotations-1.3.jar,file:///root/.ivy2/jars/com.google.http-client_google-http-client-1.42.3.jar,file:///root/.ivy2/jars/io.opencensus_opencensus-contrib-http-util-0.31.1.jar,file:///root/.ivy2/jars/com.google.http-client_google-http-client-jackson2-1.42.3.jar,file:///root/.ivy2/jars/com.google.http-client_google-http-client-gson-1.42.3.jar,file:///root/.ivy2/jars/com.google.api-client_google-api-client-2.1.1.jar,file:///root/.ivy2/jars/commons-codec_commons-codec-1.15.jar,file:///root/.ivy2/jars/com.google.oauth-client_google-oauth-client-1.34.1.jar,file:///root/.ivy2/jars/com.google.http-client_google-http-client-apache-v2-1.42.3.jar,file:///root/.ivy2/jars/com.google.apis_google-api-services-storage-v1-rev20220705-2.0.0.jar,file:///root/.ivy2/jars/com.google.code.gson_gson-2.10.jar,file:///root/.ivy2/jars/com.google.cloud_google-cloud-core-2.9.0.jar,file:///root/.ivy2/jars/com.google.auto.value_auto-value-annotations-1.10.1.jar,file:///root/.ivy2/jars/com.google.cloud_google-cloud-core-http-2.9.0.jar,file:///root/.ivy2/jars/com.google.http-client_google-http-client-appengine-1.42.3.jar,file:///root/.ivy2/jars/com.google.api_gax-httpjson-0.105.1.jar,file:///root/.ivy2/jars/com.google.cloud_google-cloud-core-grpc-2.9.0.jar,file:///root/.ivy2/jars/io.grpc_grpc-core-1.51.0.jar,file:///root/.ivy2/jars/com.google.api_gax-2.20.1.jar,file:///root/.ivy2/jars/com.google.api_gax-grpc-2.20.1.jar,file:///root/.ivy2/jars/io.grpc_grpc-alts-1.51.0.jar,file:///root/.ivy2/jars/io.grpc_grpc-grpclb-1.51.0.jar,file:///root/.ivy2/jars/org.conscrypt_conscrypt-openjdk-uber-2.5.2.jar,file:///root/.ivy2/jars/io.grpc_grpc-protobuf-1.51.0.jar,file:///root/.ivy2/jars/com.google.auth_google-auth-library-credentials-1.13.0.jar,file:///root/.ivy2/jars/com.google.auth_google-auth-library-oauth2-http-1.13.0.jar,file:///root/.ivy2/jars/com.google.api_api-common-2.2.2.jar,file:///root/.ivy2/jars/javax.annotation_javax.annotation-api-1.3.2.jar,file:///root/.ivy2/jars/io.opencensus_opencensus-api-0.31.1.jar,file:///root/.ivy2/jars/io.grpc_grpc-context-1.51.0.jar,file:///root/.ivy2/jars/com.google.api.grpc_proto-google-iam-v1-1.6.22.jar,file:///root/.ivy2/jars/com.google.protobuf_protobuf-java-3.21.10.jar,file:///root/.ivy2/jars/com.google.protobuf_protobuf-java-util-3.21.10.jar,file:///root/.ivy2/jars/com.google.api.grpc_proto-google-common-protos-2.11.0.jar,file:///root/.ivy2/jars/org.threeten_threetenbp-1.6.4.jar,file:///root/.ivy2/jars/com.google.api.grpc_proto-google-cloud-storage-v2-2.16.0-alpha.jar,file:///root/.ivy2/jars/com.google.api.grpc_grpc-google-cloud-storage-v2-2.16.0-alpha.jar,file:///root/.ivy2/jars/com.google.api.grpc_gapic-google-cloud-storage-v2-2.16.0-alpha.jar,file:///root/.ivy2/jars/com.fasterxml.jackson.core_jackson-core-2.14.1.jar,file:///root/.ivy2/jars/com.google.code.findbugs_jsr305-3.0.2.jar,file:///root/.ivy2/jars/io.grpc_grpc-api-1.51.0.jar,file:///root/.ivy2/jars/io.grpc_grpc-auth-1.51.0.jar,file:///root/.ivy2/jars/io.grpc_grpc-stub-1.51.0.jar,file:///root/.ivy2/jars/org.checkerframework_checker-qual-3.28.0.jar,file:///root/.ivy2/jars/com.google.api.grpc_grpc-google-iam-v1-1.6.22.jar,file:///root/.ivy2/jars/io.grpc_grpc-protobuf-lite-1.51.0.jar,file:///root/.ivy2/jars/com.google.android_annotations-4.1.1.4.jar,file:///root/.ivy2/jars/org.codehaus.mojo_animal-sniffer-annotations-1.22.jar,file:///root/.ivy2/jars/io.grpc_grpc-netty-shaded-1.51.0.jar,file:///root/.ivy2/jars/io.perfmark_perfmark-api-0.26.0.jar,file:///root/.ivy2/jars/io.grpc_grpc-googleapis-1.51.0.jar,file:///root/.ivy2/jars/io.grpc_grpc-xds-1.51.0.jar,file:///root/.ivy2/jars/io.opencensus_opencensus-proto-0.2.0.jar,file:///root/.ivy2/jars/io.grpc_grpc-services-1.51.0.jar,file:///root/.ivy2/jars/com.google.re2j_re2j-1.6.jar,file:///root/.ivy2/jars/dk.brics.automaton_automaton-1.11-8.jar,file:///root/.ivy2/jars/org.slf4j_slf4j-api-1.7.16.jar'),\n", - " ('spark.yarn.am.attemptFailuresValidityInterval', '1h'),\n", - " ('spark.app.name', 'Spark Updated Conf'),\n", - " ('spark.sql.catalogImplementation', 'hive'),\n", - " ('spark.executorEnv.OPENBLAS_NUM_THREADS', '1'),\n", - " ('spark.yarn.secondary.jars',\n", - " 'com.johnsnowlabs.nlp_spark-nlp_2.12-4.4.0.jar,graphframes_graphframes-0.8.2-spark3.1-s_2.12.jar,com.typesafe_config-1.4.2.jar,org.rocksdb_rocksdbjni-6.29.5.jar,com.amazonaws_aws-java-sdk-bundle-1.11.828.jar,com.github.universal-automata_liblevenshtein-3.0.0.jar,com.google.cloud_google-cloud-storage-2.16.0.jar,com.navigamez_greex-1.0.jar,com.johnsnowlabs.nlp_tensorflow-cpu_2.12-0.4.4.jar,it.unimi.dsi_fastutil-7.0.12.jar,org.projectlombok_lombok-1.16.8.jar,com.google.guava_guava-31.1-jre.jar,com.google.guava_failureaccess-1.0.1.jar,com.google.guava_listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar,com.google.errorprone_error_prone_annotations-2.16.jar,com.google.j2objc_j2objc-annotations-1.3.jar,com.google.http-client_google-http-client-1.42.3.jar,io.opencensus_opencensus-contrib-http-util-0.31.1.jar,com.google.http-client_google-http-client-jackson2-1.42.3.jar,com.google.http-client_google-http-client-gson-1.42.3.jar,com.google.api-client_google-api-client-2.1.1.jar,commons-codec_commons-codec-1.15.jar,com.google.oauth-client_google-oauth-client-1.34.1.jar,com.google.http-client_google-http-client-apache-v2-1.42.3.jar,com.google.apis_google-api-services-storage-v1-rev20220705-2.0.0.jar,com.google.code.gson_gson-2.10.jar,com.google.cloud_google-cloud-core-2.9.0.jar,com.google.auto.value_auto-value-annotations-1.10.1.jar,com.google.cloud_google-cloud-core-http-2.9.0.jar,com.google.http-client_google-http-client-appengine-1.42.3.jar,com.google.api_gax-httpjson-0.105.1.jar,com.google.cloud_google-cloud-core-grpc-2.9.0.jar,io.grpc_grpc-core-1.51.0.jar,com.google.api_gax-2.20.1.jar,com.google.api_gax-grpc-2.20.1.jar,io.grpc_grpc-alts-1.51.0.jar,io.grpc_grpc-grpclb-1.51.0.jar,org.conscrypt_conscrypt-openjdk-uber-2.5.2.jar,io.grpc_grpc-protobuf-1.51.0.jar,com.google.auth_google-auth-library-credentials-1.13.0.jar,com.google.auth_google-auth-library-oauth2-http-1.13.0.jar,com.google.api_api-common-2.2.2.jar,javax.annotation_javax.annotation-api-1.3.2.jar,io.opencensus_opencensus-api-0.31.1.jar,io.grpc_grpc-context-1.51.0.jar,com.google.api.grpc_proto-google-iam-v1-1.6.22.jar,com.google.protobuf_protobuf-java-3.21.10.jar,com.google.protobuf_protobuf-java-util-3.21.10.jar,com.google.api.grpc_proto-google-common-protos-2.11.0.jar,org.threeten_threetenbp-1.6.4.jar,com.google.api.grpc_proto-google-cloud-storage-v2-2.16.0-alpha.jar,com.google.api.grpc_grpc-google-cloud-storage-v2-2.16.0-alpha.jar,com.google.api.grpc_gapic-google-cloud-storage-v2-2.16.0-alpha.jar,com.fasterxml.jackson.core_jackson-core-2.14.1.jar,com.google.code.findbugs_jsr305-3.0.2.jar,io.grpc_grpc-api-1.51.0.jar,io.grpc_grpc-auth-1.51.0.jar,io.grpc_grpc-stub-1.51.0.jar,org.checkerframework_checker-qual-3.28.0.jar,com.google.api.grpc_grpc-google-iam-v1-1.6.22.jar,io.grpc_grpc-protobuf-lite-1.51.0.jar,com.google.android_annotations-4.1.1.4.jar,org.codehaus.mojo_animal-sniffer-annotations-1.22.jar,io.grpc_grpc-netty-shaded-1.51.0.jar,io.perfmark_perfmark-api-0.26.0.jar,io.grpc_grpc-googleapis-1.51.0.jar,io.grpc_grpc-xds-1.51.0.jar,io.opencensus_opencensus-proto-0.2.0.jar,io.grpc_grpc-services-1.51.0.jar,com.google.re2j_re2j-1.6.jar,dk.brics.automaton_automaton-1.11-8.jar,org.slf4j_slf4j-api-1.7.16.jar'),\n", - " ('spark.repl.local.jars',\n", - " 'file:///root/.ivy2/jars/com.johnsnowlabs.nlp_spark-nlp_2.12-4.4.0.jar,file:///root/.ivy2/jars/graphframes_graphframes-0.8.2-spark3.1-s_2.12.jar,file:///root/.ivy2/jars/com.typesafe_config-1.4.2.jar,file:///root/.ivy2/jars/org.rocksdb_rocksdbjni-6.29.5.jar,file:///root/.ivy2/jars/com.amazonaws_aws-java-sdk-bundle-1.11.828.jar,file:///root/.ivy2/jars/com.github.universal-automata_liblevenshtein-3.0.0.jar,file:///root/.ivy2/jars/com.google.cloud_google-cloud-storage-2.16.0.jar,file:///root/.ivy2/jars/com.navigamez_greex-1.0.jar,file:///root/.ivy2/jars/com.johnsnowlabs.nlp_tensorflow-cpu_2.12-0.4.4.jar,file:///root/.ivy2/jars/it.unimi.dsi_fastutil-7.0.12.jar,file:///root/.ivy2/jars/org.projectlombok_lombok-1.16.8.jar,file:///root/.ivy2/jars/com.google.guava_guava-31.1-jre.jar,file:///root/.ivy2/jars/com.google.guava_failureaccess-1.0.1.jar,file:///root/.ivy2/jars/com.google.guava_listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar,file:///root/.ivy2/jars/com.google.errorprone_error_prone_annotations-2.16.jar,file:///root/.ivy2/jars/com.google.j2objc_j2objc-annotations-1.3.jar,file:///root/.ivy2/jars/com.google.http-client_google-http-client-1.42.3.jar,file:///root/.ivy2/jars/io.opencensus_opencensus-contrib-http-util-0.31.1.jar,file:///root/.ivy2/jars/com.google.http-client_google-http-client-jackson2-1.42.3.jar,file:///root/.ivy2/jars/com.google.http-client_google-http-client-gson-1.42.3.jar,file:///root/.ivy2/jars/com.google.api-client_google-api-client-2.1.1.jar,file:///root/.ivy2/jars/commons-codec_commons-codec-1.15.jar,file:///root/.ivy2/jars/com.google.oauth-client_google-oauth-client-1.34.1.jar,file:///root/.ivy2/jars/com.google.http-client_google-http-client-apache-v2-1.42.3.jar,file:///root/.ivy2/jars/com.google.apis_google-api-services-storage-v1-rev20220705-2.0.0.jar,file:///root/.ivy2/jars/com.google.code.gson_gson-2.10.jar,file:///root/.ivy2/jars/com.google.cloud_google-cloud-core-2.9.0.jar,file:///root/.ivy2/jars/com.google.auto.value_auto-value-annotations-1.10.1.jar,file:///root/.ivy2/jars/com.google.cloud_google-cloud-core-http-2.9.0.jar,file:///root/.ivy2/jars/com.google.http-client_google-http-client-appengine-1.42.3.jar,file:///root/.ivy2/jars/com.google.api_gax-httpjson-0.105.1.jar,file:///root/.ivy2/jars/com.google.cloud_google-cloud-core-grpc-2.9.0.jar,file:///root/.ivy2/jars/io.grpc_grpc-core-1.51.0.jar,file:///root/.ivy2/jars/com.google.api_gax-2.20.1.jar,file:///root/.ivy2/jars/com.google.api_gax-grpc-2.20.1.jar,file:///root/.ivy2/jars/io.grpc_grpc-alts-1.51.0.jar,file:///root/.ivy2/jars/io.grpc_grpc-grpclb-1.51.0.jar,file:///root/.ivy2/jars/org.conscrypt_conscrypt-openjdk-uber-2.5.2.jar,file:///root/.ivy2/jars/io.grpc_grpc-protobuf-1.51.0.jar,file:///root/.ivy2/jars/com.google.auth_google-auth-library-credentials-1.13.0.jar,file:///root/.ivy2/jars/com.google.auth_google-auth-library-oauth2-http-1.13.0.jar,file:///root/.ivy2/jars/com.google.api_api-common-2.2.2.jar,file:///root/.ivy2/jars/javax.annotation_javax.annotation-api-1.3.2.jar,file:///root/.ivy2/jars/io.opencensus_opencensus-api-0.31.1.jar,file:///root/.ivy2/jars/io.grpc_grpc-context-1.51.0.jar,file:///root/.ivy2/jars/com.google.api.grpc_proto-google-iam-v1-1.6.22.jar,file:///root/.ivy2/jars/com.google.protobuf_protobuf-java-3.21.10.jar,file:///root/.ivy2/jars/com.google.protobuf_protobuf-java-util-3.21.10.jar,file:///root/.ivy2/jars/com.google.api.grpc_proto-google-common-protos-2.11.0.jar,file:///root/.ivy2/jars/org.threeten_threetenbp-1.6.4.jar,file:///root/.ivy2/jars/com.google.api.grpc_proto-google-cloud-storage-v2-2.16.0-alpha.jar,file:///root/.ivy2/jars/com.google.api.grpc_grpc-google-cloud-storage-v2-2.16.0-alpha.jar,file:///root/.ivy2/jars/com.google.api.grpc_gapic-google-cloud-storage-v2-2.16.0-alpha.jar,file:///root/.ivy2/jars/com.fasterxml.jackson.core_jackson-core-2.14.1.jar,file:///root/.ivy2/jars/com.google.code.findbugs_jsr305-3.0.2.jar,file:///root/.ivy2/jars/io.grpc_grpc-api-1.51.0.jar,file:///root/.ivy2/jars/io.grpc_grpc-auth-1.51.0.jar,file:///root/.ivy2/jars/io.grpc_grpc-stub-1.51.0.jar,file:///root/.ivy2/jars/org.checkerframework_checker-qual-3.28.0.jar,file:///root/.ivy2/jars/com.google.api.grpc_grpc-google-iam-v1-1.6.22.jar,file:///root/.ivy2/jars/io.grpc_grpc-protobuf-lite-1.51.0.jar,file:///root/.ivy2/jars/com.google.android_annotations-4.1.1.4.jar,file:///root/.ivy2/jars/org.codehaus.mojo_animal-sniffer-annotations-1.22.jar,file:///root/.ivy2/jars/io.grpc_grpc-netty-shaded-1.51.0.jar,file:///root/.ivy2/jars/io.perfmark_perfmark-api-0.26.0.jar,file:///root/.ivy2/jars/io.grpc_grpc-googleapis-1.51.0.jar,file:///root/.ivy2/jars/io.grpc_grpc-xds-1.51.0.jar,file:///root/.ivy2/jars/io.opencensus_opencensus-proto-0.2.0.jar,file:///root/.ivy2/jars/io.grpc_grpc-services-1.51.0.jar,file:///root/.ivy2/jars/com.google.re2j_re2j-1.6.jar,file:///root/.ivy2/jars/dk.brics.automaton_automaton-1.11-8.jar,file:///root/.ivy2/jars/org.slf4j_slf4j-api-1.7.16.jar'),\n", - " ('spark.sql.cbo.enabled', 'true'),\n", - " ('spark.executorEnv.PYTHONPATH',\n", - " '/usr/lib/spark/python/lib/py4j-0.10.9-src.zip:/usr/lib/spark/python/:{{PWD}}/pyspark.zip{{PWD}}/py4j-0.10.9-src.zip{{PWD}}/com.johnsnowlabs.nlp_spark-nlp_2.12-4.4.0.jar{{PWD}}/graphframes_graphframes-0.8.2-spark3.1-s_2.12.jar{{PWD}}/com.typesafe_config-1.4.2.jar{{PWD}}/org.rocksdb_rocksdbjni-6.29.5.jar{{PWD}}/com.amazonaws_aws-java-sdk-bundle-1.11.828.jar{{PWD}}/com.github.universal-automata_liblevenshtein-3.0.0.jar{{PWD}}/com.google.cloud_google-cloud-storage-2.16.0.jar{{PWD}}/com.navigamez_greex-1.0.jar{{PWD}}/com.johnsnowlabs.nlp_tensorflow-cpu_2.12-0.4.4.jar{{PWD}}/it.unimi.dsi_fastutil-7.0.12.jar{{PWD}}/org.projectlombok_lombok-1.16.8.jar{{PWD}}/com.google.guava_guava-31.1-jre.jar{{PWD}}/com.google.guava_failureaccess-1.0.1.jar{{PWD}}/com.google.guava_listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar{{PWD}}/com.google.errorprone_error_prone_annotations-2.16.jar{{PWD}}/com.google.j2objc_j2objc-annotations-1.3.jar{{PWD}}/com.google.http-client_google-http-client-1.42.3.jar{{PWD}}/io.opencensus_opencensus-contrib-http-util-0.31.1.jar{{PWD}}/com.google.http-client_google-http-client-jackson2-1.42.3.jar{{PWD}}/com.google.http-client_google-http-client-gson-1.42.3.jar{{PWD}}/com.google.api-client_google-api-client-2.1.1.jar{{PWD}}/commons-codec_commons-codec-1.15.jar{{PWD}}/com.google.oauth-client_google-oauth-client-1.34.1.jar{{PWD}}/com.google.http-client_google-http-client-apache-v2-1.42.3.jar{{PWD}}/com.google.apis_google-api-services-storage-v1-rev20220705-2.0.0.jar{{PWD}}/com.google.code.gson_gson-2.10.jar{{PWD}}/com.google.cloud_google-cloud-core-2.9.0.jar{{PWD}}/com.google.auto.value_auto-value-annotations-1.10.1.jar{{PWD}}/com.google.cloud_google-cloud-core-http-2.9.0.jar{{PWD}}/com.google.http-client_google-http-client-appengine-1.42.3.jar{{PWD}}/com.google.api_gax-httpjson-0.105.1.jar{{PWD}}/com.google.cloud_google-cloud-core-grpc-2.9.0.jar{{PWD}}/io.grpc_grpc-core-1.51.0.jar{{PWD}}/com.google.api_gax-2.20.1.jar{{PWD}}/com.google.api_gax-grpc-2.20.1.jar{{PWD}}/io.grpc_grpc-alts-1.51.0.jar{{PWD}}/io.grpc_grpc-grpclb-1.51.0.jar{{PWD}}/org.conscrypt_conscrypt-openjdk-uber-2.5.2.jar{{PWD}}/io.grpc_grpc-protobuf-1.51.0.jar{{PWD}}/com.google.auth_google-auth-library-credentials-1.13.0.jar{{PWD}}/com.google.auth_google-auth-library-oauth2-http-1.13.0.jar{{PWD}}/com.google.api_api-common-2.2.2.jar{{PWD}}/javax.annotation_javax.annotation-api-1.3.2.jar{{PWD}}/io.opencensus_opencensus-api-0.31.1.jar{{PWD}}/io.grpc_grpc-context-1.51.0.jar{{PWD}}/com.google.api.grpc_proto-google-iam-v1-1.6.22.jar{{PWD}}/com.google.protobuf_protobuf-java-3.21.10.jar{{PWD}}/com.google.protobuf_protobuf-java-util-3.21.10.jar{{PWD}}/com.google.api.grpc_proto-google-common-protos-2.11.0.jar{{PWD}}/org.threeten_threetenbp-1.6.4.jar{{PWD}}/com.google.api.grpc_proto-google-cloud-storage-v2-2.16.0-alpha.jar{{PWD}}/com.google.api.grpc_grpc-google-cloud-storage-v2-2.16.0-alpha.jar{{PWD}}/com.google.api.grpc_gapic-google-cloud-storage-v2-2.16.0-alpha.jar{{PWD}}/com.fasterxml.jackson.core_jackson-core-2.14.1.jar{{PWD}}/com.google.code.findbugs_jsr305-3.0.2.jar{{PWD}}/io.grpc_grpc-api-1.51.0.jar{{PWD}}/io.grpc_grpc-auth-1.51.0.jar{{PWD}}/io.grpc_grpc-stub-1.51.0.jar{{PWD}}/org.checkerframework_checker-qual-3.28.0.jar{{PWD}}/com.google.api.grpc_grpc-google-iam-v1-1.6.22.jar{{PWD}}/io.grpc_grpc-protobuf-lite-1.51.0.jar{{PWD}}/com.google.android_annotations-4.1.1.4.jar{{PWD}}/org.codehaus.mojo_animal-sniffer-annotations-1.22.jar{{PWD}}/io.grpc_grpc-netty-shaded-1.51.0.jar{{PWD}}/io.perfmark_perfmark-api-0.26.0.jar{{PWD}}/io.grpc_grpc-googleapis-1.51.0.jar{{PWD}}/io.grpc_grpc-xds-1.51.0.jar{{PWD}}/io.opencensus_opencensus-proto-0.2.0.jar{{PWD}}/io.grpc_grpc-services-1.51.0.jar{{PWD}}/com.google.re2j_re2j-1.6.jar{{PWD}}/dk.brics.automaton_automaton-1.11-8.jar{{PWD}}/org.slf4j_slf4j-api-1.7.16.jar'),\n", - " ('spark.yarn.dist.jars',\n", - " 'file:///root/.ivy2/jars/com.johnsnowlabs.nlp_spark-nlp_2.12-4.4.0.jar,file:///root/.ivy2/jars/graphframes_graphframes-0.8.2-spark3.1-s_2.12.jar,file:///root/.ivy2/jars/com.typesafe_config-1.4.2.jar,file:///root/.ivy2/jars/org.rocksdb_rocksdbjni-6.29.5.jar,file:///root/.ivy2/jars/com.amazonaws_aws-java-sdk-bundle-1.11.828.jar,file:///root/.ivy2/jars/com.github.universal-automata_liblevenshtein-3.0.0.jar,file:///root/.ivy2/jars/com.google.cloud_google-cloud-storage-2.16.0.jar,file:///root/.ivy2/jars/com.navigamez_greex-1.0.jar,file:///root/.ivy2/jars/com.johnsnowlabs.nlp_tensorflow-cpu_2.12-0.4.4.jar,file:///root/.ivy2/jars/it.unimi.dsi_fastutil-7.0.12.jar,file:///root/.ivy2/jars/org.projectlombok_lombok-1.16.8.jar,file:///root/.ivy2/jars/com.google.guava_guava-31.1-jre.jar,file:///root/.ivy2/jars/com.google.guava_failureaccess-1.0.1.jar,file:///root/.ivy2/jars/com.google.guava_listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar,file:///root/.ivy2/jars/com.google.errorprone_error_prone_annotations-2.16.jar,file:///root/.ivy2/jars/com.google.j2objc_j2objc-annotations-1.3.jar,file:///root/.ivy2/jars/com.google.http-client_google-http-client-1.42.3.jar,file:///root/.ivy2/jars/io.opencensus_opencensus-contrib-http-util-0.31.1.jar,file:///root/.ivy2/jars/com.google.http-client_google-http-client-jackson2-1.42.3.jar,file:///root/.ivy2/jars/com.google.http-client_google-http-client-gson-1.42.3.jar,file:///root/.ivy2/jars/com.google.api-client_google-api-client-2.1.1.jar,file:///root/.ivy2/jars/commons-codec_commons-codec-1.15.jar,file:///root/.ivy2/jars/com.google.oauth-client_google-oauth-client-1.34.1.jar,file:///root/.ivy2/jars/com.google.http-client_google-http-client-apache-v2-1.42.3.jar,file:///root/.ivy2/jars/com.google.apis_google-api-services-storage-v1-rev20220705-2.0.0.jar,file:///root/.ivy2/jars/com.google.code.gson_gson-2.10.jar,file:///root/.ivy2/jars/com.google.cloud_google-cloud-core-2.9.0.jar,file:///root/.ivy2/jars/com.google.auto.value_auto-value-annotations-1.10.1.jar,file:///root/.ivy2/jars/com.google.cloud_google-cloud-core-http-2.9.0.jar,file:///root/.ivy2/jars/com.google.http-client_google-http-client-appengine-1.42.3.jar,file:///root/.ivy2/jars/com.google.api_gax-httpjson-0.105.1.jar,file:///root/.ivy2/jars/com.google.cloud_google-cloud-core-grpc-2.9.0.jar,file:///root/.ivy2/jars/io.grpc_grpc-core-1.51.0.jar,file:///root/.ivy2/jars/com.google.api_gax-2.20.1.jar,file:///root/.ivy2/jars/com.google.api_gax-grpc-2.20.1.jar,file:///root/.ivy2/jars/io.grpc_grpc-alts-1.51.0.jar,file:///root/.ivy2/jars/io.grpc_grpc-grpclb-1.51.0.jar,file:///root/.ivy2/jars/org.conscrypt_conscrypt-openjdk-uber-2.5.2.jar,file:///root/.ivy2/jars/io.grpc_grpc-protobuf-1.51.0.jar,file:///root/.ivy2/jars/com.google.auth_google-auth-library-credentials-1.13.0.jar,file:///root/.ivy2/jars/com.google.auth_google-auth-library-oauth2-http-1.13.0.jar,file:///root/.ivy2/jars/com.google.api_api-common-2.2.2.jar,file:///root/.ivy2/jars/javax.annotation_javax.annotation-api-1.3.2.jar,file:///root/.ivy2/jars/io.opencensus_opencensus-api-0.31.1.jar,file:///root/.ivy2/jars/io.grpc_grpc-context-1.51.0.jar,file:///root/.ivy2/jars/com.google.api.grpc_proto-google-iam-v1-1.6.22.jar,file:///root/.ivy2/jars/com.google.protobuf_protobuf-java-3.21.10.jar,file:///root/.ivy2/jars/com.google.protobuf_protobuf-java-util-3.21.10.jar,file:///root/.ivy2/jars/com.google.api.grpc_proto-google-common-protos-2.11.0.jar,file:///root/.ivy2/jars/org.threeten_threetenbp-1.6.4.jar,file:///root/.ivy2/jars/com.google.api.grpc_proto-google-cloud-storage-v2-2.16.0-alpha.jar,file:///root/.ivy2/jars/com.google.api.grpc_grpc-google-cloud-storage-v2-2.16.0-alpha.jar,file:///root/.ivy2/jars/com.google.api.grpc_gapic-google-cloud-storage-v2-2.16.0-alpha.jar,file:///root/.ivy2/jars/com.fasterxml.jackson.core_jackson-core-2.14.1.jar,file:///root/.ivy2/jars/com.google.code.findbugs_jsr305-3.0.2.jar,file:///root/.ivy2/jars/io.grpc_grpc-api-1.51.0.jar,file:///root/.ivy2/jars/io.grpc_grpc-auth-1.51.0.jar,file:///root/.ivy2/jars/io.grpc_grpc-stub-1.51.0.jar,file:///root/.ivy2/jars/org.checkerframework_checker-qual-3.28.0.jar,file:///root/.ivy2/jars/com.google.api.grpc_grpc-google-iam-v1-1.6.22.jar,file:///root/.ivy2/jars/io.grpc_grpc-protobuf-lite-1.51.0.jar,file:///root/.ivy2/jars/com.google.android_annotations-4.1.1.4.jar,file:///root/.ivy2/jars/org.codehaus.mojo_animal-sniffer-annotations-1.22.jar,file:///root/.ivy2/jars/io.grpc_grpc-netty-shaded-1.51.0.jar,file:///root/.ivy2/jars/io.perfmark_perfmark-api-0.26.0.jar,file:///root/.ivy2/jars/io.grpc_grpc-googleapis-1.51.0.jar,file:///root/.ivy2/jars/io.grpc_grpc-xds-1.51.0.jar,file:///root/.ivy2/jars/io.opencensus_opencensus-proto-0.2.0.jar,file:///root/.ivy2/jars/io.grpc_grpc-services-1.51.0.jar,file:///root/.ivy2/jars/com.google.re2j_re2j-1.6.jar,file:///root/.ivy2/jars/dk.brics.automaton_automaton-1.11-8.jar,file:///root/.ivy2/jars/org.slf4j_slf4j-api-1.7.16.jar'),\n", - " ('spark.dataproc.sql.parquet.enableFooterCache', 'true'),\n", - " ('spark.driver.memory', '4g'),\n", - " ('spark.sql.warehouse.dir', 'file:/spark-warehouse'),\n", - " ('spark.yarn.executor.failuresValidityInterval', '1h'),\n", - " ('spark.org.apache.hadoop.yarn.server.webproxy.amfilter.AmIpFilter.param.PROXY_HOSTS',\n", - " 'hub-msca-bdp-dphub-students-ridhi-m'),\n", - " ('spark.yarn.am.memory', '640m'),\n", - " ('spark.cores.max', '4'),\n", - " ('spark.executor.cores', '4'),\n", - " ('spark.org.apache.hadoop.yarn.server.webproxy.amfilter.AmIpFilter.param.PROXY_URI_BASES',\n", - " 'http://hub-msca-bdp-dphub-students-ridhi-m:8088/proxy/application_1699939112432_0001'),\n", - " ('spark.jars.packages',\n", - " 'com.johnsnowlabs.nlp:spark-nlp_2.12:4.4.0,graphframes:graphframes:0.8.2-spark3.1-s_2.12'),\n", - " ('spark.executor.instances', '2'),\n", - " ('spark.dataproc.listeners',\n", - " 'com.google.cloud.spark.performance.DataprocMetricsListener'),\n", - " ('spark.serializer.objectStreamReset', '100'),\n", - " ('spark.submit.deployMode', 'client'),\n", - " ('spark.driver.appUIAddress',\n", - " 'http://hub-msca-bdp-dphub-students-ridhi-m.c.msca-bdp-student-ap.internal:42995'),\n", - " ('spark.app.id', 'application_1699939112432_0001'),\n", - " ('spark.sql.cbo.joinReorder.enabled', 'true'),\n", - " ('spark.eventLog.dir',\n", - " 'gs://dataproc-temp-us-central1-635155370842-uzamlpgc/913fbcd2-8c32-41c5-b3b1-e2206e964691/spark-job-history'),\n", - " ('spark.shuffle.service.enabled', 'true'),\n", - " ('spark.scheduler.mode', 'FAIR'),\n", - " ('spark.sql.adaptive.enabled', 'true'),\n", - " ('spark.yarn.jars', 'local:/usr/lib/spark/jars/*'),\n", - " ('spark.driver.host',\n", - " 'hub-msca-bdp-dphub-students-ridhi-m.c.msca-bdp-student-ap.internal'),\n", - " ('spark.scheduler.minRegisteredResourcesRatio', '0.0'),\n", - " ('spark.app.startTime', '1699940854474'),\n", - " ('spark.master', 'yarn'),\n", - " ('spark.ui.port', '0'),\n", - " ('spark.ui.proxyBase', '/proxy/application_1699939112432_0001'),\n", - " ('spark.rpc.message.maxSize', '512'),\n", - " ('spark.rdd.compress', 'True'),\n", - " ('spark.task.maxFailures', '10'),\n", - " ('spark.yarn.isPython', 'true'),\n", - " ('spark.dynamicAllocation.enabled', 'true'),\n", - " ('spark.dataproc.metrics.listener.metrics.collector.hostname',\n", - " 'hub-msca-bdp-dphub-students-ridhi-m'),\n", - " ('spark.ui.showConsoleProgress', 'true')]" - ] - }, - "execution_count": 2, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "spark = SparkSession.builder.appName('2020EDA').getOrCreate()\n", - "\n", - "#change configuration settings on Spark \n", - "conf = spark.sparkContext._conf.setAll([('spark.executor.memory', '4g'), ('spark.app.name', 'Spark Updated Conf'), ('spark.executor.cores', '4'), ('spark.cores.max', '4'), ('spark.driver.memory','4g')])\n", - "\n", - "#print spark configuration settings\n", - "spark.sparkContext.getConf().getAll()" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "id": "a10a9fef-7517-4947-a7a5-b17db05dbb79", - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - " \r" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "root\n", - " |-- Trip ID: string (nullable = true)\n", - " |-- Trip Start Timestamp: string (nullable = true)\n", - " |-- Trip End Timestamp: string (nullable = true)\n", - " |-- Trip Seconds: integer (nullable = true)\n", - " |-- Trip Miles: double (nullable = true)\n", - " |-- Pickup Census Tract: long (nullable = true)\n", - " |-- Dropoff Census Tract: long (nullable = true)\n", - " |-- Pickup Community Area: integer (nullable = true)\n", - " |-- Dropoff Community Area: integer (nullable = true)\n", - " |-- Fare: double (nullable = true)\n", - " |-- Tip: integer (nullable = true)\n", - " |-- Additional Charges: double (nullable = true)\n", - " |-- Trip Total: double (nullable = true)\n", - " |-- Shared Trip Authorized: boolean (nullable = true)\n", - " |-- Trips Pooled: integer (nullable = true)\n", - " |-- Pickup Centroid Latitude: double (nullable = true)\n", - " |-- Pickup Centroid Longitude: double (nullable = true)\n", - " |-- Pickup Centroid Location: string (nullable = true)\n", - " |-- Dropoff Centroid Latitude: double (nullable = true)\n", - " |-- Dropoff Centroid Longitude: double (nullable = true)\n", - " |-- Dropoff Centroid Location: string (nullable = true)\n", - "\n", - "root\n", - " |-- name: string (nullable = true)\n", - " |-- datetime: string (nullable = true)\n", - " |-- tempmax: double (nullable = true)\n", - " |-- tempmin: double (nullable = true)\n", - " |-- temp: double (nullable = true)\n", - " |-- feelslikemax: double (nullable = true)\n", - " |-- feelslikemin: double (nullable = true)\n", - " |-- feelslike: double (nullable = true)\n", - " |-- dew: double (nullable = true)\n", - " |-- humidity: double (nullable = true)\n", - " |-- precip: double (nullable = true)\n", - " |-- precipprob: integer (nullable = true)\n", - " |-- precipcover: double (nullable = true)\n", - " |-- preciptype: string (nullable = true)\n", - " |-- snow: double (nullable = true)\n", - " |-- snowdepth: double (nullable = true)\n", - " |-- windgust: double (nullable = true)\n", - " |-- windspeed: double (nullable = true)\n", - " |-- winddir: double (nullable = true)\n", - " |-- sealevelpressure: double (nullable = true)\n", - " |-- cloudcover: double (nullable = true)\n", - " |-- visibility: double (nullable = true)\n", - " |-- solarradiation: double (nullable = true)\n", - " |-- solarenergy: double (nullable = true)\n", - " |-- uvindex: integer (nullable = true)\n", - " |-- severerisk: integer (nullable = true)\n", - " |-- sunrise: timestamp (nullable = true)\n", - " |-- sunset: timestamp (nullable = true)\n", - " |-- moonphase: double (nullable = true)\n", - " |-- conditions: string (nullable = true)\n", - " |-- description: string (nullable = true)\n", - " |-- icon: string (nullable = true)\n", - " |-- stations: string (nullable = true)\n", - "\n" - ] - } - ], - "source": [ - "df_2020 = spark.read.csv(\"gs://msca-bdp-student-gcs/bdp-rideshare-project/rideshare/2020\", inferSchema=True, header=True)\n", - "# figure out how to read in shp file msca-bdp-student-gcs/bdp-rideshare-project/neighborhoods/shp files\n", - "df_weather = spark.read.csv(\"gs://msca-bdp-student-gcs/bdp-rideshare-project/weather/chicago 2020-01-01 to 2022-08-31.csv\", inferSchema=True, header=True)\n", - "df_2020.printSchema()\n", - "df_weather.printSchema()" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "id": "8138c57a-26d6-44c4-b765-c7b137277044", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "97" - ] - }, - "execution_count": 6, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "#display number of records by partition\n", - "def displaypartitions(df):\n", - " #number of records by partition\n", - " num = df.rdd.getNumPartitions()\n", - " print(\"Partitions:\", num)\n", - " df.withColumn(\"partitionId\", F.spark_partition_id())\\\n", - " .groupBy(\"partitionId\")\\\n", - " .count()\\\n", - " .orderBy(F.asc(\"count\"))\\\n", - " .show(num)\n", - "\n", - "df_2020.rdd.getNumPartitions()" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "id": "e70c86dd-041c-4967-b726-c058e32a76b7", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Partitions: 97\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[Stage 12:============> (3 + 10) / 13]\r" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "+-----------+------+\n", - "|partitionId| count|\n", - "+-----------+------+\n", - "| 96|258032|\n", - "| 26|500083|\n", - "| 5|501403|\n", - "| 25|501617|\n", - "| 9|501838|\n", - "| 13|501919|\n", - "| 30|501968|\n", - "| 17|502424|\n", - "| 42|502478|\n", - "| 21|502487|\n", - "| 34|502608|\n", - "| 38|505369|\n", - "| 29|505648|\n", - "| 24|505937|\n", - "| 8|506529|\n", - "| 4|507322|\n", - "| 39|507425|\n", - "| 32|507539|\n", - "| 10|508044|\n", - "| 1|508091|\n", - "| 35|508308|\n", - "| 20|508847|\n", - "| 28|508849|\n", - "| 7|508943|\n", - "| 33|509077|\n", - "| 0|509157|\n", - "| 12|509264|\n", - "| 14|509338|\n", - "| 22|509490|\n", - "| 16|509594|\n", - "| 37|509717|\n", - "| 19|509765|\n", - "| 27|509816|\n", - "| 41|510016|\n", - "| 18|510197|\n", - "| 23|510233|\n", - "| 15|510280|\n", - "| 11|510321|\n", - "| 40|510615|\n", - "| 2|511375|\n", - "| 36|511411|\n", - "| 6|511524|\n", - "| 3|511528|\n", - "| 31|513062|\n", - "| 43|516927|\n", - "| 79|517478|\n", - "| 74|518098|\n", - "| 81|518307|\n", - "| 71|519141|\n", - "| 84|519158|\n", - "| 69|519657|\n", - "| 76|520374|\n", - "| 77|520851|\n", - "| 63|521166|\n", - "| 72|521485|\n", - "| 66|521582|\n", - "| 60|521583|\n", - "| 82|521898|\n", - "| 83|522349|\n", - "| 68|523313|\n", - "| 65|523712|\n", - "| 56|523812|\n", - "| 62|523882|\n", - "| 86|524026|\n", - "| 75|524419|\n", - "| 57|524580|\n", - "| 78|524679|\n", - "| 59|524726|\n", - "| 73|525173|\n", - "| 87|525497|\n", - "| 70|525678|\n", - "| 67|525913|\n", - "| 64|526308|\n", - "| 80|526397|\n", - "| 92|527091|\n", - "| 61|527305|\n", - "| 55|528823|\n", - "| 91|528997|\n", - "| 93|529058|\n", - "| 58|529125|\n", - "| 85|529157|\n", - "| 53|529171|\n", - "| 54|529329|\n", - "| 94|529819|\n", - "| 88|530841|\n", - "| 89|533123|\n", - "| 44|533431|\n", - "| 90|533636|\n", - "| 95|535170|\n", - "| 52|535269|\n", - "| 50|537569|\n", - "| 51|537856|\n", - "| 48|538147|\n", - "| 49|538619|\n", - "| 47|538848|\n", - "| 45|539321|\n", - "| 46|539781|\n", - "+-----------+------+\n", - "\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - " \r" - ] - } - ], - "source": [ - "displaypartitions(df_2020)" - ] - }, - { - "cell_type": "code", - "execution_count": 67, - "id": "fe004162-5b22-4a11-9fad-665fa5cdecc0", - "metadata": {}, - "outputs": [], - "source": [ - "# df_2020 = df_2020.repartition(10)" - ] - }, - { - "cell_type": "code", - "execution_count": 68, - "id": "f34f9ec5-1a72-42ed-8bbe-3b54683a8bf4", - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[Stage 250:===============================================> (5 + 1) / 6]\r" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Partitions: 10\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[Stage 256:=================================================> (188 + 6) / 200]\r" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "+-----------+------+\n", - "|partitionId| count|\n", - "+-----------+------+\n", - "| 5|270864|\n", - "| 7|270865|\n", - "| 6|270865|\n", - "| 0|270865|\n", - "| 9|270866|\n", - "| 1|270866|\n", - "| 4|270866|\n", - "| 8|270866|\n", - "| 2|270866|\n", - "| 3|270867|\n", - "+-----------+------+\n", - "\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - " \r" - ] - } - ], - "source": [ - "displaypartitions(df_2020)" - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "id": "22a6039e-9848-4717-98b6-bc915540357b", - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[Stage 15:> (0 + 1) / 1]\r" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "+-------+--------------------+--------------------+--------------------+-----------------+-----------------+--------------------+--------------------+---------------------+----------------------+-----------------+------------------+------------------+------------------+-------------------+------------------------+-------------------------+------------------------+-------------------------+--------------------------+-------------------------+\n", - "|summary| Trip ID|Trip Start Timestamp| Trip End Timestamp| Trip Seconds| Trip Miles| Pickup Census Tract|Dropoff Census Tract|Pickup Community Area|Dropoff Community Area| Fare| Tip|Additional Charges| Trip Total| Trips Pooled|Pickup Centroid Latitude|Pickup Centroid Longitude|Pickup Centroid Location|Dropoff Centroid Latitude|Dropoff Centroid Longitude|Dropoff Centroid Location|\n", - "+-------+--------------------+--------------------+--------------------+-----------------+-----------------+--------------------+--------------------+---------------------+----------------------+-----------------+------------------+------------------+------------------+-------------------+------------------------+-------------------------+------------------------+-------------------------+--------------------------+-------------------------+\n", - "| count| 50011143| 50011143| 50011143| 50009609| 50011143| 25552144| 25398361| 46235118| 45840972| 50008963| 50008963| 50008963| 50008963| 50011143| 46263229| 46263229| 46263229| 45868779| 45868779| 45868779|\n", - "| mean|1.373583619993279...| null| null|981.6210416682122|6.464524796004037|1.703137217611449...|1.703137874885807...| 27.884638360823477| 28.103252893503218|11.98546143618295|0.5381202365663931| 3.653324201719032|16.176905874483193| 1.0598493419756474| 41.88332258320717| -87.66831634171741| null| 41.883841259384006| -87.66921480888618| null|\n", - "| stddev|1.942540584448027...| null| null|665.9193598074515|7.136882245055217| 335400.7723048382| 338354.069918292| 21.37707505859245| 21.49382267795679|9.248252506760796|1.6621638065659214| 2.009722323823483|10.711679809453967|0.31743075485168015| 0.07161681186613066| 0.06154557744072147| null| 0.07130685256487491| 0.0637022921588504| null|\n", - "| min|0000019aa70ee91e2...|01/01/2020 01:00:...|01/01/2020 01:00:...| 0| 0.0| 17031010100| 17031010100| 1| 1| 0.0| 0| 0.0| 0.0| 1| 41.6502216756| -87.913624596| POINT (-87.529950...| 41.6502216756| -87.913624596| POINT (-87.529950...|\n", - "| max|ffffffa50e88bdb8d...|12/31/2020 12:45:...|12/31/2020 12:45:...| 67195| 856.1| 17031980100| 17031980100| 77| 77| 1182.5| 500| 257.1| 1196.03| 128| 42.0212235931| -87.529950466| POINT (-87.913624...| 42.0212235931| -87.529950466| POINT (-87.913624...|\n", - "+-------+--------------------+--------------------+--------------------+-----------------+-----------------+--------------------+--------------------+---------------------+----------------------+-----------------+------------------+------------------+------------------+-------------------+------------------------+-------------------------+------------------------+-------------------------+--------------------------+-------------------------+\n", - "\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - " \r" - ] - } - ], - "source": [ - "df_2020.describe().show()" - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "id": "c78e4618-8383-4df2-862b-4cb9dbeb20ab", - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[Stage 16:======================================================> (95 + 2) / 97]\r" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "+-------+--------------------+------------------+------------+----------+-------------------+--------------------+---------------------+----------------------+----+----+------------------+----------+----------------------+------------+------------------------+-------------------------+------------------------+-------------------------+--------------------------+-------------------------+\n", - "|Trip ID|Trip Start Timestamp|Trip End Timestamp|Trip Seconds|Trip Miles|Pickup Census Tract|Dropoff Census Tract|Pickup Community Area|Dropoff Community Area|Fare| Tip|Additional Charges|Trip Total|Shared Trip Authorized|Trips Pooled|Pickup Centroid Latitude|Pickup Centroid Longitude|Pickup Centroid Location|Dropoff Centroid Latitude|Dropoff Centroid Longitude|Dropoff Centroid Location|\n", - "+-------+--------------------+------------------+------------+----------+-------------------+--------------------+---------------------+----------------------+----+----+------------------+----------+----------------------+------------+------------------------+-------------------------+------------------------+-------------------------+--------------------------+-------------------------+\n", - "| 0| 0| 0| 1534| 0| 24458999| 24612782| 3776025| 4170171|2180|2180| 2180| 2180| 0| 0| 3747914| 3747914| 3747914| 4142364| 4142364| 4142364|\n", - "+-------+--------------------+------------------+------------+----------+-------------------+--------------------+---------------------+----------------------+----+----+------------------+----------+----------------------+------------+------------------------+-------------------------+------------------------+-------------------------+--------------------------+-------------------------+\n", - "\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - " \r" - ] - } - ], - "source": [ - "#Find the number of missing values for each column\n", - "from pyspark.sql.functions import isnan, when, count, col\n", - "df_2020.select([count(when(df_2020[c].isNull(), c)).alias(c) for c in df_2020.columns]).show()" - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "id": "2dd6ea75-5417-4d27-92bb-4d9a24808545", - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - " \r" - ] - }, - { - "data": { - "text/plain": [ - "23700840" - ] - }, - "execution_count": 10, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "# number of observations with all the data in each column\n", - "df_2020.dropna(how='any').count()" - ] - }, - { - "cell_type": "code", - "execution_count": 11, - "id": "46e2e9e5-3581-444c-b149-827a5cbc62f5", - "metadata": {}, - "outputs": [], - "source": [ - "# Working with just data that contains full information and check for dupes\n", - "df_2020 = df_2020.dropna(how='any', subset=['Trip Start Timestamp','Trip End Timestamp','Fare','Dropoff Community Area','Pickup Community Area'])\n", - "df_2020 = df_2020.dropDuplicates()\n", - "# df_2020.count()" - ] - }, - { - "cell_type": "code", - "execution_count": 12, - "id": "6a52d857-bc07-47a7-8cc9-71478bf10e08", - "metadata": {}, - "outputs": [], - "source": [ - "# Drop columns unlikely to be useful for analysis for speed of computation and rename columns to remove spacing for ease of code writing\n", - "spark.conf.set(\"spark.sql.legacy.timeParserPolicy\", \"LEGACY\")\n", - "\n", - "df_2020 = df_2020.drop('Trips Pooled','Additional Charges','Shared Trip Authorized','Pickup Centroid Location','Dropoff Centroid Location')\n", - "df_2020 = df_2020.withColumnRenamed(\"Trip ID\",\"ID\").withColumnRenamed(\"Trip Start Timestamp\",\"start_timestamp\").withColumnRenamed(\"Trip End Timestamp\",\"end_timestamp\").withColumnRenamed(\"Trip Miles\",\\\n", - " \"miles\").withColumnRenamed(\"Pickup Census Tract\",\"pickup_tract\").withColumnRenamed(\"Dropoff Census Tract\",\"dropoff_tract\").withColumnRenamed(\"Pickup Community Area\",\"pickup_area\"\\\n", - " ).withColumnRenamed(\"Dropoff Community Area\",\"dropoff_area\").withColumnRenamed(\"Trip Total\",\"total\").withColumnRenamed(\"Pickup Centroid Latitude\",\"pickup_lat\").withColumnRenamed(\\\n", - " \"Pickup Centroid Longitude\",\"pickup_lon\").withColumnRenamed(\"Pickup Centroid Location\",\"pickup_location\").withColumnRenamed(\"Dropoff Centroid Latitude\",\"dropoff_lat\").withColumnRenamed(\\\n", - " \"Dropoff Centroid Longitude\",\"dropoff_lon\").withColumnRenamed(\"Dropoff Centroid Location\",\"dropoff_location\")\n", - "# fix datatypes\n", - "df_2020 = df_2020.withColumn('start_timestamp', F.to_timestamp(df_2020['start_timestamp'], 'MM/dd/yyyy hh:mm:ss a')).withColumn('end_timestamp', F.to_timestamp(df_2020['end_timestamp'], 'MM/dd/yyyy hh:mm:ss a'))\n", - "df_weather = df_weather.withColumn('datetime',F.to_date(df_weather['datetime'], \"yyyy-MM-dd\"))\n" - ] - }, - { - "cell_type": "code", - "execution_count": 13, - "id": "17ebe569-82bb-49b0-aaaf-ac5062bede35", - "metadata": {}, - "outputs": [], - "source": [ - "# add the month column\n", - "df_2020 = df_2020.withColumn('month', F.month(df_2020.start_timestamp))\n", - "df_2020 = df_2020.withColumn('hour', F.hour(df_2020.start_timestamp))" - ] - }, - { - "cell_type": "code", - "execution_count": 14, - "id": "2ae6d6b2-9001-4ded-ba3a-225861cbe451", - "metadata": {}, - "outputs": [], - "source": [ - "# get rides that occurred within hyde park\n", - "# add kenwood and woodlawn to this list - only if the other location is hyde park \n", - "df_hp = df_2020.filter((df_2020.pickup_area == 41) & (df_2020.dropoff_area == 41))\n", - "df_kw = df_2020.filter(((df_2020.pickup_area == 41) & (df_2020.dropoff_area == 42)) | ((df_2020.pickup_area == 42) & (df_2020.dropoff_area == 41)))\n", - "df_wl = df_2020.filter(((df_2020.pickup_area == 41) & (df_2020.dropoff_area == 39)) | ((df_2020.pickup_area == 39) & (df_2020.dropoff_area == 41)))\n", - "df_area = df_hp.union(df_kw).union(df_wl)" - ] - }, - { - "cell_type": "code", - "execution_count": 15, - "id": "67a9c9c1-dd4e-41b6-9d29-b475a1189268", - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[Stage 28:> (0 + 1) / 1]\r" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "+--------------------+-------------------+-------------------+------------+-----+------------+-------------+-----------+------------+----+---+-----+-------------+--------------+-------------+--------------+-----+----+\n", - "| ID| start_timestamp| end_timestamp|Trip Seconds|miles|pickup_tract|dropoff_tract|pickup_area|dropoff_area|Fare|Tip|total| pickup_lat| pickup_lon| dropoff_lat| dropoff_lon|month|hour|\n", - "+--------------------+-------------------+-------------------+------------+-----+------------+-------------+-----------+------------+----+---+-----+-------------+--------------+-------------+--------------+-----+----+\n", - "|dd1abbb706a73a116...|2020-01-01 22:45:00|2020-01-01 22:45:00| 110| 0.5| null| null| 41| 41| 2.5| 0| 5.05| 41.794090253| -87.592310855| 41.794090253| -87.592310855| 1| 22|\n", - "|e9e914b8ad5d34b4d...|2020-01-02 10:15:00|2020-01-02 10:15:00| 209| 0.8| null| null| 41| 41| 2.5| 0| 5.05| 41.794090253| -87.592310855| 41.794090253| -87.592310855| 1| 10|\n", - "|e545f29facc8e0619...|2020-01-01 01:45:00|2020-01-01 01:45:00| 183| 0.6| 17031411000| 17031410100| 41| 41| 7.5| 0|10.05|41.7905062613|-87.5831437169|41.8012268363|-87.5853031602| 1| 1|\n", - "|152b412c71a331569...|2020-01-02 20:15:00|2020-01-02 20:30:00| 535| 1.0| 17031410800| 17031410900| 41| 41| 5.0| 2| 9.55|41.7979652088|-87.5896070309|41.7971534246|-87.5823657023| 1| 20|\n", - "|954437c8d7e9d73ec...|2020-01-01 02:00:00|2020-01-01 02:00:00| 150| 0.5| 17031410700| 17031410500| 41| 41| 2.5| 0| 5.05|41.7980417164|-87.5941966274|41.7978270187|-87.6037457654| 1| 2|\n", - "+--------------------+-------------------+-------------------+------------+-----+------------+-------------+-----------+------------+----+---+-----+-------------+--------------+-------------+--------------+-----+----+\n", - "only showing top 5 rows\n", - "\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - " \r" - ] - } - ], - "source": [ - "df_area.show(5)" - ] - }, - { - "cell_type": "code", - "execution_count": 16, - "id": "2c54ef92-e61e-4827-ad6c-bb8b9405e701", - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - " \r" - ] - }, - { - "data": { - "text/plain": [ - "" - ] - }, - "execution_count": 16, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "image/png": "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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "df_area.groupby(\"month\").agg({'ID':'count'}).orderBy(F.col('month').asc()).toPandas().plot(x=\"month\",y=\"count(ID)\")" - ] - }, - { - "cell_type": "markdown", - "id": "8e9f1724-7b0f-4a80-8a3d-aa101a7fbe19", - "metadata": {}, - "source": [ - "The code after this point is what remains to be done and is untested. If we all finish the things written below we should be done with the EDA" - ] - }, - { - "cell_type": "markdown", - "id": "68feb932-946e-4bfe-a4b3-e11f6cbc1f73", - "metadata": {}, - "source": [ - "**Rides around March start declining drastically and reach an all time low in April and afterwards barely recovers till the end of 2020.**" - ] - }, - { - "cell_type": "code", - "execution_count": 17, - "id": "f1638b38-1606-428c-aac8-5f48bc36a3d2", - "metadata": {}, - "outputs": [], - "source": [ - "# verify this is the correct time period for your given year\n", - "df_area_program = df_area.filter((df_area.Fare <= 15.0) & (df_area.hour >= 17) & (df_area.hour < 4))\n", - "# do the same kind of monthly plot here" - ] - }, - { - "cell_type": "code", - "execution_count": 18, - "id": "a1b60972-6242-4259-8209-87d9fe9e750f", - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "23/11/14 06:25:02 WARN org.apache.spark.sql.catalyst.util.package: Truncated the string representation of a plan since it was too large. This behavior can be adjusted by setting 'spark.sql.debug.maxToStringFields'.\n", - "[Stage 58:=================================================> (29 + 4) / 33]\r" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "+-------------------------+\n", - "|approx_count_distinct(ID)|\n", - "+-------------------------+\n", - "| 304886|\n", - "+-------------------------+\n", - "\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - " \r" - ] - } - ], - "source": [ - "from pyspark.sql.functions import approxCountDistinct\n", - "\n", - "df_area.select(approxCountDistinct(\"ID\", rsd = 0.05)).show()" - ] - }, - { - "cell_type": "code", - "execution_count": 19, - "id": "2fda94cd-990c-436b-93b0-979f7e3c8ad3", - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - " \r" - ] - }, - { - "data": { - "text/plain": [ - "" - ] - }, - "execution_count": 19, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAhYAAAHACAYAAAD+yCF8AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjQuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/MnkTPAAAACXBIWXMAAA9hAAAPYQGoP6dpAABH40lEQVR4nO3deXhTZdoG8PskadMtSdt031v2pUCBtrKooA4jKorrgKgIOuMCCPo5KjM6oqPUZXQcRUEcB0EHcBwFFccFF0BR2tJS9r2lLaWle9I2bdom5/ujTaBCoWmTnpz0/l1XLsjJSfIQoL37vs95X0EURRFERERETqCQugAiIiLyHAwWRERE5DQMFkREROQ0DBZERETkNAwWRERE5DQMFkREROQ0DBZERETkNAwWRERE5DQMFkREROQ0DBZERETkNJIFi23btmHatGmIioqCIAjYuHGjw68hiiL+9re/YeDAgVCr1YiNjcXSpUudXywRERF1iUqqN25oaMDIkSMxZ84c3Hzzzd16jYULF+Kbb77B3/72NyQnJ8NgMKCystLJlRIREVFXCe6wCZkgCNiwYQOmT59uP9bc3Iwnn3wS//73v1FbW4vhw4fjxRdfxKRJkwAABw8exIgRI7Bv3z4MGjRImsKJiIioA7ftsZgzZw62b9+O9evXY8+ePbj11ltx9dVX4+jRowCAzz//HElJSdi0aRMSExORkJCAe++9F9XV1RJXTkRE1He5ZbA4fvw41q1bh48++giXXnop+vXrh0cffRQTJ07EqlWrAAD5+fkoLCzERx99hDVr1uC9995DTk4ObrnlFomrJyIi6rsk67G4kNzcXIiiiIEDB3Y4bjabodfrAQBWqxVmsxlr1qyxn/fuu+9izJgxOHz4MKdHiIiIJOCWwcJqtUKpVCInJwdKpbLDYwEBAQCAyMhIqFSqDuFjyJAhAICioiIGCyIiIgm4ZbBISUmBxWJBeXk5Lr300vOeM2HCBLS2tuL48ePo168fAODIkSMAgPj4+F6rlYiIiM6Q7KqQ+vp6HDt2DEBbkHj11VcxefJkBAcHIy4uDnfccQe2b9+OV155BSkpKaisrMT333+P5ORkXHPNNbBarUhNTUVAQABee+01WK1WzJs3D1qtFt98840UfyQiIqI+T7JgsWXLFkyePPmc47Nnz8Z7772HlpYWPPfcc1izZg1KSkqg1+sxbtw4PPPMM0hOTgYAnDp1CgsWLMA333wDf39/TJ06Fa+88gqCg4N7+49DREREcJN1LIiIiMgzuOXlpkRERCRPDBZERETkNL1+VYjVasWpU6eg0WggCEJvvz0RERF1gyiKqKurQ1RUFBSKzsclej1YnDp1CrGxsb39tkREROQExcXFiImJ6fTxXg8WGo0GQFthWq22t9+eiIiIusFoNCI2Ntb+fbwzvR4sbNMfWq2WwYKIiEhmLtbGwOZNIiIichqHgkVrayuefPJJJCYmwtfXF0lJSXj22WdhtVpdVR8RERHJiENTIS+++CJWrFiB1atXY9iwYdi5cyfmzJkDnU6HhQsXuqpGIiIikgmHgsUvv/yCG264Addeey0AICEhAevWrcPOnTtdUhwREcmLxWJBS0uL1GVQN3h5eZ2zo3h3OBQsJk6ciBUrVuDIkSMYOHAgdu/ejZ9++gmvvfZap88xm80wm832+0ajsdvFEhGRexJFEWVlZaitrZW6FOqBwMBARERE9GidKYeCxeOPPw6DwYDBgwdDqVTCYrHg+eefx8yZMzt9TkZGBp555pluF0hERO7PFirCwsLg5+fHBRBlRhRFmEwmlJeXAwAiIyO7/VoOBYsPP/wQH3zwAdauXYthw4YhLy8PixYtQlRUFGbPnn3e5yxevBiPPPKI/b7tOlgiIvIMFovFHir0er3U5VA3+fr6AgDKy8sRFhbW7WkRh4LFH//4RzzxxBOYMWMGACA5ORmFhYXIyMjoNFio1Wqo1epuFUdERO7P1lPh5+cncSXUU7a/w5aWlm4HC4cuNzWZTOesD65UKnm5KRERcfrDAzjj79ChEYtp06bh+eefR1xcHIYNG4Zdu3bh1Vdfxdy5c3tcCBEREcmfQyMWb7zxBm655RY8+OCDGDJkCB599FHcd999+Otf/+qq+oiIiPqk5uZm9O/fH9u3b+/xa23atAkpKSm9MsPgULDQaDR47bXXUFhYiMbGRhw/fhzPPfccvL29XVUfERGRxzpx4gQEQUBeXt45j61cuRLx8fGYMGGC/ZggCNi4cWOH+7abv78/BgwYgLvvvhs5OTkdXuu6666DIAhYu3atq/4odtwrpBc1t1rRamE/ChERXdwbb7yBe++996LnrVq1CqWlpdi/fz/efPNN1NfXIz09HWvWrOlw3pw5c/DGG2+4qlw7BgsXK6ltxAc7CnHv6p0Y+cw3SF/6HaobmqUui4iIAFitVrz44ovo378/1Go14uLi8PzzzwMA9u7diyuuuAK+vr7Q6/X4wx/+gPr6evtzJ02ahEWLFnV4venTp+Puu++2309ISMDSpUsxd+5caDQaxMXFYeXKlfbHExMTAQApKSkQBAGTJk0CAOTm5uLYsWP2la4vxLaoVUJCAqZMmYL//ve/mDVrFubPn4+amhr7eddffz2ysrKQn5/v6MfkEAYLJ2uxWPHL8Spk/O8gpvx9Kya88D2e3LgP3x48jcYWC6oamvHj0QqpyyQichlRFGFqbpXkJoqiQ7UuXrwYL774Ip566ikcOHAAa9euRXh4OEwmE66++moEBQUhOzsbH330Eb799lvMnz/f4c/jlVdewdixY7Fr1y48+OCDeOCBB3Do0CEAQFZWFgDg22+/RWlpKT755BMAwLZt2zBw4EBotVqH3w8AHn74YdTV1WHz5s32Y/Hx8QgLC8OPP/7YrdfsKoeuCqHzO21swtbDFfjhcDl+OlqJOnOr/TGFAIyJD8KkQWE4WGrEpj2lyCqoxg2joiWsmIjIdRpbLBj6l68lee8Dz/4Wft5d+9ZWV1eHf/zjH1i2bJl9LaZ+/fph4sSJeOedd9DY2Ig1a9bA398fALBs2TJMmzYNL774IsLDw7tc0zXXXIMHH3wQQNsK1n//+9+xZcsWDB48GKGhoQAAvV6PiIgI+3NOnDiBqKioLr/Hrw0ePNj+OmeLjo4+55izMVh0Q6vFirziWvxwuBw/HKrAgdKO+5/o/b1x+aBQTB4UhksHhCDQr6259ev9Zdi0pxSZBdVSlE1ERGc5ePAgzGYzrrzyyvM+NnLkSHuoAIAJEybAarXi8OHDDgWLESNG2H8vCAIiIiLsS2d3prGxET4+Pl1+j1+zjdz8el0KX19fmEymbr9uVzBYdFFlvRnbjlTgh8MV2HakAobGM7v3CQIwMiYQk9rDRHK0DgrFuYuMpCYEAwCOldejst6MkACuSEpEnsfXS4kDz/5Wsvfu8rntS1ifjyiKnS4WZTuuUCjOmXo5386uXl5e5zz/Ypd9hoSEYO/evRc850IOHjwI4EwPh011dbV9lMRVGCw6YbWK2FNiwA+HyrHlcDn2lBhw9r8fna8XLh8YismDQ3HZgFDouxASgv29MTA8AEdO12PniWpcPbz7m7wQEbkrQRC6PB0hpQEDBsDX1xfffffdOVdfDB06FKtXr0ZDQ4N91GL79u1QKBQYOHAgACA0NBSlpaX251gsFuzbtw+TJ0/ucg225RosFkuH4ykpKVi+fPkFA86FvPbaa9Bqtbjqqqvsx5qamnD8+HGkpKQ4/HqOcP+/+V5Ua2rGtqOV2HKoHFuPVKDqV1dvDIvSYvKgMEweHIqRMYFQKR3vfU1P1OPI6XpkFjBYEBFJycfHB48//jgee+wxeHt7Y8KECaioqMD+/fsxa9YsPP3005g9ezaWLFmCiooKLFiwAHfeead9GuSKK67AI488gi+++AL9+vXD3//+d4e3jQ8LC4Ovry+++uorxMTEwMfHBzqdDpMnT0ZDQwP279+P4cOHX/A1amtrUVZWBrPZjCNHjuDtt9/Gxo0bsWbNGgQGBtrP27FjB9RqNcaNG+foR+WQPh0sRFHE/lNGbDlcjh8OV2BXUQ2sZ41KaNQqTBwQgsmDwnD5oFCEa7s/32WTlhiM93cUIjOffRZERFJ76qmnoFKp8Je//AWnTp1CZGQk7r//fvj5+eHrr7/GwoULkZqaCj8/P9x888149dVX7c+dO3cudu/ejbvuugsqlQoPP/ywQ6MVAKBSqfD666/j2WefxV/+8hdceuml2LJlC/R6PW666Sb8+9//RkZGxgVfY86cOQDaglJ0dDQmTpyIrKwsjB49usN569atw6xZs1y+WZwgOnptTg8ZjUbodDoYDIZuX0bTo/dvasH2o5X44XA5thyuQHmducPjg8I1mDS4rVdiTHwQvLoxKnEh5cYmpC39DoIA5P1lCnS+Xhd/EhGRG2tqakJBQQESExN71HBIHe3duxdXXXUVjh07Bo1G06PXqqiowODBg7Fz585z+i7OdqG/y65+//b4EQtRFHHkdH17kCjHzhM1aD1rWMLXS4kJ/UMweXAoJg0KQ3Rg5808zhCm9UFiiD8KKhuQU1iNKwZ3vbOYiIj6juTkZLz00ks4ceIEkpOTe/RaBQUFeOutty4YKpzFI4NFg7kVPx+vagsTh8pxytDU4fGkUH9MHhSGSYNCkZYYDLWqe3vOd1daQjAKKhuQWcBgQUREnbOtr9FTaWlpSEtLc8prXYxHBAtRFJFf2YAf2psuM/Or0XzWnhxqlQLj+untYSJe73+BV3O9tMRgfLizmH0WRETkcTwiWDS2WDD1tR87hInYYN+2KzgGheGSJD18vXt3VOJC0hLb1rPYV2JAg7kV/mqP+GsgIiLyjGDh563ChP56tFjEtkWqBochKcS/W9f+9obYYD9EB/qipLYRu4pqMXFAiNQlERH1WC9fC0Au4Iy/Q48IFgDwr7tT3TZInE9aYjA27CpBZkEVgwURyZptZUmTyXTB1SzJ/dmW+/71aqGO8JhgIadQAZwdLNhnQUTyplQqERgYaN//ws/PT3Zfk/s6URRhMplQXl6OwMBAKJXdbx/wmGAhN+ntfRZ5xbVoarHAx4H17YmI3I1tZ86Lba5F7i0wMLDDLqvdwWAhkcQQf4QEqFFZb8aekwZ7QycRkRwJgoDIyEiEhYWddyMucn9eXl49GqmwYbCQiCAISE8Mxhd7S5GZX8VgQUQeQalUOuWbE8mXc9erJofYwkTWCfZZEBGRZ2CwkFB6UluwyCmsQctZa3AQERHJFYOFhAaGaaDz9YKp2YJ9JQapyyEiIuoxBgsJKRQCUhPap0N42SkREXkABguJXZLEYEFERJ6DwUJiZzdwWqxcDpeIiOSNwUJiQyO18PdWoq6pFYfKjFKXQ0RE1CMMFhJTKRUYwz4LIiLyEAwWbsC2vDeDBRERyR2DhRs4O1hw22EiIpIzBgs3kByjg1qlQFVDM45X1EtdDhERUbcxWLgBtUqJ0XFBAMBt1ImISNYYLNxEGvssiIjIAzBYuAlbn0VmPvssiIhIvhgs3ERKXBC8lALKjE0orm6UuhwiIqJuYbBwE77eSoyICQQAZBZUSVsMERFRNzFYuBH2WRARkdwxWLgRW7DglSFERCRXDBZuZGx8EBQCUFRtQqmBfRZERCQ/DBZuROPjhWFROgCcDiEiInlyKFgkJCRAEIRzbvPmzXNVfX0Op0OIiEjOHAoW2dnZKC0ttd82b94MALj11ltdUlxfxAZOIiKSM5UjJ4eGhna4/8ILL6Bfv364/PLLnVpUX5bWvoX6sfJ6VNabERKglrgiIiKirut2j0VzczM++OADzJ07F4IgOLOmPi3I3xuDwjUAgJ0nOGpBRETy0u1gsXHjRtTW1uLuu+++4HlmsxlGo7HDjS7MNh2yI5/BgoiI5KXbweLdd9/F1KlTERUVdcHzMjIyoNPp7LfY2NjuvmWfkZ7EPgsiIpKnbgWLwsJCfPvtt7j33nsveu7ixYthMBjst+Li4u68ZZ9i67M4WGaEobFF4mqIiIi6rlvBYtWqVQgLC8O111570XPVajW0Wm2HG11YmNYHiSH+EEX2WRARkbw4HCysVitWrVqF2bNnQ6Vy6KIScoBt1ILTIUREJCcOB4tvv/0WRUVFmDt3rivqoXa2PgsulEVERHLi8JDDlClTIIqiK2qhs9iuDNlXYkCDuRX+ao4OERGR++NeIW4qJsgP0YG+aLWKyC2qkbocIiKiLmGwcGNc3puIiOSGwcKNpXNDMiIikhkGCzdmG7HIK65FU4tF4mqIiIgujsHCjSWG+CMkQI3mVit2F9dKXQ4REdFFMVi4MUEQuLw3ERHJCoOFm7P1WWRxBU4iIpIBBgs3Z+uzyCmsQYvFKnE1REREF8Zg4eYGhmkQ6OcFU7MF+0oMUpdDRER0QQwWbk6hEJDKfUOIiEgmGCxkIJ0LZRERkUwwWMhA2lkNnBYr92khIiL3xWAhA0MjtQhQq1DX1IpDZUapyyEiIuoUg4UMqJQKjIkPAsDpECIicm8MFjJhmw7JzGewICIi98VgIRNnL5QliuyzICIi98RgIRMjYgKhVilQ3dCM4xX1UpdDRER0XgwWMuGtUmB0XFufBbdRJyIid8VgISPssyAiInfHYCEjZ+90yj4LIiJyRwwWMpISGwQvpYAyYxOKqxulLoeIiOgcDBYy4uutxIiYQABAZkGVtMUQERGdB4OFzNj7LNjASUREbojBQma4IRkREbkzBguZGRMfBIUAFFWbUGpgnwUREbkXBguZ0fh4YViUDgBHLYiIyP0wWMhQOvssiIjITTFYyFAa+yyIiMhNMVjIUGpCW7A4Vl6PynqzxNUQERGdwWAhQ0H+3hgUrgEAZHPUgoiI3AiDhUzZlvdmnwUREbkTBguZYp8FERG5IwYLmbIFi4NlRhhMLRJXQ0RE1IbBQqbCND5ICvGHKAI7CzlqQURE7oHBQsY4HUJERO6GwULGuCEZERG5GwYLGbMFi70lBjSYWyWuhoiIiMFC1mKC/BAd6AuLVURuUY3U5RARETFYyB23USciInfCYCFz9j6LfAYLIiKSnsPBoqSkBHfccQf0ej38/PwwatQo5OTkuKI26oL0JD0AIK+4Fk0tFomrISKivs6hYFFTU4MJEybAy8sLX375JQ4cOIBXXnkFgYGBLiqPLiZB74dQjRrNFit2F9dKXQ4REfVxKkdOfvHFFxEbG4tVq1bZjyUkJDi7JnKAIAhISwzGF3tKkVVQbR/BICIikoJDIxafffYZxo4di1tvvRVhYWFISUnBO++846raqIvSuZ4FERG5CYeCRX5+PpYvX44BAwbg66+/xv3334+HHnoIa9as6fQ5ZrMZRqOxw42cKz2xbZQip7AGLRarxNUQEVFf5lCwsFqtGD16NJYuXYqUlBTcd999+P3vf4/ly5d3+pyMjAzodDr7LTY2tsdFU0cDwgIQ6OeFxhYL9pUYpC6HiIj6MIeCRWRkJIYOHdrh2JAhQ1BUVNTpcxYvXgyDwWC/FRcXd69S6pRCISA1getZEBGR9BwKFhMmTMDhw4c7HDty5Aji4+M7fY5arYZWq+1wI+djnwUREbkDh4LFww8/jB07dmDp0qU4duwY1q5di5UrV2LevHmuqo+6yNZnkX2iGharKHE1RETUVzkULFJTU7FhwwasW7cOw4cPx1//+le89tprmDVrlqvqoy4aEqlBgFqFuqZWHCpjgywREUnDoXUsAOC6667Ddddd54paqAdUSgXGxAdh65EKZOZXY1iUTuqSiIioD+JeIR4kPYkNnEREJC0GCw9i3+n0RDVEkX0WRETU+xgsPEhydCDUKgWqG5pxvKJe6nKIiKgPYrDwIN4qBUbHBQEAdnAbdSIikgCDhYdhnwUREUmJwcLDpCWeCRbssyAiot7GYOFhUmKD4KUUUGZsQlG1SepyiIioj2Gw8DC+3kqMjAkEwOW9iYio9zFYeKCzp0OIiIh6E4OFB2KwICIiqTBYeKAx8UFQCEBRtQmlhkapyyEioj6EwcIDaXy8MDy6ba8QjloQEVFvYrDwUGkJbdMhbOAkIqLexGDhodhnQUREUmCw8FC2YHGsvB6V9WaJqyEior6CwcJDBfp5Y3CEBgCQzVELIiLqJQwWHsw2asE+CyIi6i0MFh6MwYKIiHobg4UHswWLQ2VGGEwtEldDRER9AYOFBwvT+CApxB+iCOws5KgFERG5HoOFh+Nlp0RE1JsYLDxcelJbsNjBYEFERL2AwcLDpSXqAQD7SgxoMLdKXA0REXk6BgsPFx3oi+hAX1isInKLaqQuh4iIPByDRR+QbrvsNJ/TIURE5FoMFn2Arc+CDZxERORqDBZ9gK3PIq+4Fk0tFomrISIiT8Zg0Qck6P0QqlGj2WLF7uJaqcshIiIPxmDRBwiCcKbPgtMhRETkQgwWfUQ6F8oiIqJewGDRR9j6LHIKa9BisUpcDREReSoGiz5iQFgAAv280Nhiwb4Sg9TlEBGRh2Kw6CMUCgFpCeyzICIi12Kw6EO4IRkREbkag0Ufkt7eZ5F9ohoWqyhxNURE5IkYLPqQoVFaBKhVqGtqxcFSo9TlEBGRB2Kw6EOUCgFjE4IAcDqEiIhcg8Gij2GfBRERuRKDRR9jXyjrRDVEkX0WRETkXAwWfUxydCB8vBSobmjGsfJ6qcshIiIP41CwWLJkCQRB6HCLiIhwVW3kAt4qBUbHtfVZcD0LIiJyNodHLIYNG4bS0lL7be/eva6oi1yIfRZEROQqKoefoFJxlELm2tazOIrMgiqIoghBEKQuiYiIPITDIxZHjx5FVFQUEhMTMWPGDOTn57uiLnKhlLhAeCkFnDaaUVRtkrocIiLyIA4Fi/T0dKxZswZff/013nnnHZSVlWH8+PGoqqrq9DlmsxlGo7HDjaTl46XEyJhAAOyzICIi53IoWEydOhU333wzkpOTcdVVV+GLL74AAKxevbrT52RkZECn09lvsbGxPauYnIJ9FkRE5Ao9utzU398fycnJOHr0aKfnLF68GAaDwX4rLi7uyVuSk6Qnte0bklnQ+WgTERGRo3oULMxmMw4ePIjIyMhOz1Gr1dBqtR1uJL0x8UFQCEBxdSNO1TZKXQ4REXkIh4LFo48+iq1bt6KgoACZmZm45ZZbYDQaMXv2bFfVRy4SoFZheLQOQNtup0RERM7gULA4efIkZs6ciUGDBuGmm26Ct7c3duzYgfj4eFfVRy6UltDWZ7Ejn8GCiIicw6F1LNavX++qOkgC6Ul6/POnAmSxz4KIiJyEe4X0YantW6gfr2hAZb1Z4mqIiMgTMFj0YYF+3hgcoQEAZPOyUyIicgIGiz7Oto06F8oiIiJnYLDo49ISbetZMFgQEVHPMVj0camJbX0Wh8qMMJhaJK6GiIjkjsGijwvT+CApxB+iCOws5KgFERH1DIMFIT2JfRZEROQcDBZk35CMwYKIiHqKwYLsDZz7SgxoMLdKXA0REckZgwUhOtAXMUG+sFhF5BTWSF0OERHJGIMFATgzHZLF6RAiIuoBBgsCcGahLAYLIiLqCQYLAnCmzyKvuBZNLRaJqyEiIrlisCAAQILeD2EaNZotVuQV10pdDhERyRSDBQEABEFgnwUREfUYgwXZsc+CiIh6isGC7NKT2voscgpr0GKxSlwNERHJEYMF2fUPDUCQnxcaWyzYc9IgdTlERCRDDBZkp1AISE3gdAgREXUfgwV1YJsOySqokrgSIiKSIwYL6sDWwLnzRA0sVlHiaoiISG4YLKiDIZFaaHxUqDO34sApo9TlEBGRzDBYUAfKs/osMjkdQkREDmKwoHPYpkMy2cBJREQOYrCgc9hW4Mw+UQ0r+yyIiMgBDBZ0juHROvh5K1FrasGR8jqpyyEiIhlhsKBzeCkVGBMfBADIzOd0CBERdR2DBZ3XmT4LNnASEVHXMVjQeZ1ZKKsaosg+CyIi6hoGCzqvETE6qFUKVNY343hFg9TlEBGRTDBY0HmpVUqkxAUC4HQIERF1HYMFdSo98cx0CBERUVcwWFCn7A2c+eyzICKirmGwoE6lxAXBSymgzNiE4upGqcshIiIZYLCgTvl6KzEyJhAAsIN9FkRE1AUMFnRBaWdNhxAREV0MgwVdkH09ixMcsSAiootjsKALGhMfBKVCQHF1I07Vss+CiIgujMGCLihArcLwKC0ArmdBREQXx2BBF3X28t5EREQXwmBBF5WWwAZOIiLqmh4Fi4yMDAiCgEWLFjmpHHJHqYnBEAQgv7IB5cYmqcshIiI31u1gkZ2djZUrV2LEiBHOrIfckM7XC0Mi2vossk5w1IKIiDrXrWBRX1+PWbNm4Z133kFQUJCzayI3xPUsiIioK7oVLObNm4drr70WV1111UXPNZvNMBqNHW4kP5cktQcLXhlCREQXoHL0CevXr0dubi6ys7O7dH5GRgaeeeYZhwsj95La3sB55HQ9qhuaEezvLXFFRETkjhwasSguLsbChQvxwQcfwMfHp0vPWbx4MQwGg/1WXFzcrUJJWvoANQaEBQDgZadERNQ5h4JFTk4OysvLMWbMGKhUKqhUKmzduhWvv/46VCoVLBbLOc9Rq9XQarUdbiRP6ZwOISKii3BoKuTKK6/E3r17OxybM2cOBg8ejMcffxxKpdKpxZF7SU/U44MdRRyxICKiTjkULDQaDYYPH97hmL+/P/R6/TnHyfOkt18ZcqDUCENjC3S+XhJXRERE7oYrb1KXhWl9kBjiD1EEcgo5akFEROdy+KqQX9uyZYsTyiC5SE8MRkFlAzLzq3HF4HCpyyEiIjfDEQtyiG2hrB3ssyAiovNgsCCH2HY63VdiQIO5VeJqiIjI3TBYkEOiA30RHegLi1VETmGN1OUQEZGbYbAgh3E9CyIi6gyDBTnsksS26RCuZ0FERL/GYEEOszVw7i42oKnl3NVWiYio72KwIIfF6/0QrlWj2WJFbhH7LIiI6AwGC3KYIAhI53QIERGdB4MFdYttOiQzn8GCiIjOYLCgbrmk/cqQ3KIamFvZZ0FERG0YLKhb+oUGQO/vDXOrFXtPGqQuh4iI3ASDBXWLIAhnpkPYZ0FERO0YLKjbbNuo78jnQllERNSGwYK6zbZvSE5hDVotVomrISIid8BgQd02KFwDna8XTM0W7DtllLocIiJyAwwW1G0KhYDUBNtlp5wOISIiBgvqIdtlp1woi4iIAAYL6iHblSFZJ6phsYoSV0NERFJjsKAeGRqpRYBahbqmVhwqY58FEVFfx2BBPaJSKjAmPggAl/cmIiIGC3KC9CTbQlls4CQi6usYLKjHzt7pVBTZZ0FE1JcxWFCPJUfr4OOlQI2pBUfL66Uuh4iIJMRgQT3mrTq7z4LTIUREfRmDBTmFbTqEG5IREfVtDBbkFGfvdMo+CyJyVL25FYbGFqnLICdQSV0AeYZRsYHwVilQUWdGQWUDkkIDpC6JiNycKIrIPlGDdVlF+N/eUnirFFh77yVIjtFJXRr1AIMFOYWPlxKjYgORVVCNrIJqBgsi6lR1QzM+yT2JdVlFOF7RYD9ubrXi7lVZ+O8D45EY4i9hhdQTnAohp0k/azqEiOhsoiji5+OVWLBuFy5Z+h2e++Igjlc0wM9bid+NjcW631+CYVFaVDU04853M1FubJK6ZOomjliQ06Qn6vEGjiEzvwqiKEIQBKlLIiKJVdab8d+ck/gwuxgFlWdGJ5KjdZiRFovrR0ZB4+MFAHhvThpuWfEzCqtMuOtfWfjP/eOgbX+M5IPBgpxmdHwgVAoBpwxNOFnTiNhgP6lLIiIJWK0ith+vxLqsImw+cBotlraG7gC1CtePisLM1Ljz9lGEatRYMzcNNy//BYfK6vD71Tuxem4afLyUvf1HoB5gsCCn8fNWITlGh11FtcgsqGawIOpjyo1N+CjnJNZnF6G4utF+fGRsIG5Pi8V1I6Lgr77wt514vT/em5OKGSt3ILOgGgvX78Jbs8ZAqeAIqFwwWJBTpSfq24JFfhVuGRMjdTlE5GIWq4htRyuwLrMI3x0qh8XaNjqh8VHhxpRozEiNw9AorUOvOTxah5V3jcHd/8rG1/tP48mNe7H0xmROr8oEgwU5VXpiMFZsPY6sE2zgJPJkpYZG/Cf7JP6zsxgltWdGJ8bEB2FmWhyuTY6Er3f3pzDG9wvBP2aMwoNrc7EuqxihAWo8MmWQM0onF2OwIKcamxAEhQAUVplQZmhChM5H6pKIyElaLVZsOVyBdVlF+OFwOdoHJ6Dz9cJNo6MxMy0OA8M1Tnu/qcmReG76cPx5wz68/v0x6APUmD0+wWmvT67BYEFOpfHxwrAoHfaWGJBZUIUbRkVLXRIR9dDJGhP+k12M/+w8ibKzLgNNSwzG7WlxuHp4hMsaLGelx6Oyrhl///YIlny+H/oAb1w3Isol70XOwWBBTpeWGNweLKoZLIhkqsVixXcHy7E+uwhbj1TAtlJ/sL83bh4djd+lxqF/WO8shPfQlf1RWW/G+zsK8fCHeQj09cbEASG98t7kOAYLcrr0xGC8+1MBdzolkqGiKhPWZxfho5yTqKgz24+P76fHzLQ4TBkWDrWqdy//FAQBS64fhqoGM/63twz3vb8T6/5wCUbEBPZqHdQ1DBbkdLYNyY5XNKCy3oyQALXEFRHRhTS3WrH5wGmszy7Cj0cr7cdDArxxy5hYzEiNRYLES2wrFQL+/rtRqDVl4+fjVZizKptLf7spBgtyukA/bwyO0OBQWR2yCqpxTXKk1CUR0XkUVDZgfVYR/ptzElUNzQAAQQAm9g/B7WlxuHJIOLxV7rPzg1qlxNt3jsHMd3ZgX4kRd76biU8eGI8wLZvE3YlD/2KWL1+OESNGQKvVQqvVYty4cfjyyy9dVRvJmH3fEE6HELkVc6sFn+aVYObKHZj8ty14e1s+qhqaEaZRY/7k/tj2x8l4/550TE2OdKtQYaPx8cKqu9MQr/fDyZpG3PWvLG637mYcGrGIiYnBCy+8gP79+wMAVq9ejRtuuAG7du3CsGHDXFIgyVN6kh6rfynkhmREbuJYeR3WZRXjk9yTqDG1fSMWBGDSwFDMTIvDFYPDoFK6X5A4n1CNGu/PTcdNy39uW/p7zU6s4dLfbkMQRVuvb/cEBwfj5Zdfxj333NOl841GI3Q6HQwGA7Rax1ZjI/moqDMj9flvIQjArqd+g0A/b6lLIvJ45lYLTtY0oqjKhMKqBpyoMqGo2oQTVQ3IP2t78kidD24bG4vbUmMRHegrYcU9s/+UATPe3oE6cyumDA3H8ju49LcrdfX7d7d7LCwWCz766CM0NDRg3LhxnZ5nNpthNp/pLDYajd19S5KRUI0a/UL9cbyiAVkF1ZgyLELqkog8Qr25FYVVDSisMqGwyoSi6jO/P2VoRGc/KioE4IrB4bg9PRaXDwzziG/Aw6J0WHnXWMxelYVvDnDpb3fhcLDYu3cvxo0bh6amJgQEBGDDhg0YOnRop+dnZGTgmWee6VGRJE/pSXoGCyIHiaKIqobmX4WHtlGHoiqTvcmyM37eSsQF+yFe74d4vX/br8H+GBShQajG867QGtdPj9dnjMKD/25b+jskQI3/49LfknJ4KqS5uRlFRUWora3Fxx9/jH/+85/YunVrp+HifCMWsbGxnArpAz7NK8HC9XlIjtbh8wUTpS6HyG1YrCJO1TaiqNrUHh7aQ0S1CUVVDWhotlzw+cH+3ogL9kOC3g9xen/EtweJOL0fQgPUffIn9n9nFuLPG/YBAJZMG4q7JyRKXJHncdlUiLe3t715c+zYscjOzsY//vEPvP322+c9X61WQ632vJRMF5eeqAfQNg9qbGqB1sdL4oqIek9TiwUna0w4UXkmMLT9akJxjQktls5/phMEIFLrYx9xiGsfdbD9nv+XznX20t/PbDoAfYAa00Zy6W8p9HgdC1EUO4xIENlE6HwQr/dDYZUJOYU1mDwoTOqSiJym1WJFRb0ZZYYmlNQ2tk1ZVLVPWVSbUGZs6rTfAQC8lQrEBPu2jzb4t41AhPghLtgfMUG+vMKhGx66sj+qGsxY80shHvlPHoL8uPS3FBwKFn/6058wdepUxMbGoq6uDuvXr8eWLVvw1Vdfuao+krm0hGAUVpmQmV/NYEGyIIoiak0tOF3XhDJDE8qNZpQZm3Dafmu7X1lvvmBwAIAAteo8/Q5tow6ROl+PaKB0J4Ig4Olpw1BV34wv9pZy6W+JOBQsTp8+jTvvvBOlpaXQ6XQYMWIEvvrqK/zmN79xVX0kc+lJenyUcxKZBVwoi6TX1GJBmaEtIJQZzx8aThubYG61dun1lAoBYRo1InU+SND7t01Z6NtGHRL0fgj29+6T/Q5SUioEvPq7kahtbMb2Y1z6Wwo9XsfCUVzHom8prjbh0pd+gEohYM+SKfDz5iry5HwWq4jK9mmJX48snH3fkRUag/y8EK71QbjWBxFaH4Rr1QjX+SBc44MInQ/CtGqE+Kuh4KiDW6prarEv/R0T5IuPHxiPcC793SMuX8eCqCtignwRpfPBKUMTcgtrOd9JDhFFEcam1rYRhvOEhvL2kYeKOjOsXfwRycdL0R4U2kODzgdhGjUidD7246EaNXscZM629PctK35GYZUJs/+VhQ/vGwedLxtfXY3BglxKEASkJ+mxYVcJsgqqGCyoy4qrTVi4fhdyi2q7dL5SISA0wDaq0BYUwu0BQo0IrQ/CtD7Q+qg4PdFH2Jb+vnkFl/7uTQwW5HJpicHYsKsEO7hvCHXRj0crsGDdLtS272kR6OeFcI1Ph9AQ1j5FYZum0Aeo2QxJ54jT+2H1nDT87u1fkFVQjYfW7cJbs0bLZl8UOWKwIJez7XSaV1yLphYLf1qgTomiiOVbj+NvXx+GVQRGxujw5qzRiAnyk7o0krGhUVq8M3ss7vqXbenvfci4iUt/uwojG7lcYog/QjVqNLdasbu4VupyyE3VNbXg/g9y8NJXbaFiRmosPrxvHEMFOcUlSXq8PiMFCgFYn12MVzcfkbokj8VgQS4nCALS2kctuI06nc+x8jrc8OZ2fL3/NLyVCmTclIwXbh7B0S1yqquHR+C56ckAgDe+P4b3thdIXJFnYrCgXnGJPVhwPQvq6Mu9pbhh2XbkVzQgUueD/9w/DjPT4qQuizzU7elxeOQ3AwEAz2w6gM93n5K4Is/DHgvqFelJbfuG5BTWoLnVCm8VM21f12qx4m/fHMGKrccBAOOS9Hjj9hSEBHBvIXKtBVf0R2X9maW/A/28cOmAUKnL8hj86k69on9oAIL8vNDUYsXeEoPU5ZDEqhuaMXtVlj1U/OGyJLx/TxpDBfUK29Lf146IRItFxH3v52DPyVqpy/IYDBbUKxSKs/ssOB3Sl+05WYtpb/yE7ceq4OetxLLbU/Cna4bw8j/qVUqFgFdvG4kJ/fUwNVtw96ps5FfUS12WR+D/ZOo1tm3Us9jA2Wf9J7sYt6z4BSW1jUgM8cfGeRNw3QhubU3SUKuUePvOsUiO1qG6oRl3/SsLp41NUpclewwW1GtsIxY7T9Sg1dK1TZ7IM5hbLfjThr147OM9aG614qoh4fh0/gQMDNdIXRr1cQFqFVbNSUWC3g8naxox+19ZDu0pQ+disKBeMyRSC42PCvXmVhwoNUpdDvWSUkMjfvf2DqzNLIIgAI9OGYiVd46B1od7NpB7CAlQ4/170hGqUbct/b16J5paLFKXJVsMFtRrlAoBqQltoxacDukbfjlehWlv/IS84lrofL2w6u5UzL9iAHcEJbcTG9y29LdGrULWibalvzmy2j0MFtSrbMt778hnsPBkoijinz/m4453M1FZ34yhkVp8Pn8iJg0Kk7o0ok4NjdLin7PHwlulsC/9LYpd3DaX7LiOBfUq23oW2SeqYbWK/MnVA5maW/HYf/dg055SAMBNKdF4/sZk+HpzFU1yf+lJerwxMwUPfJCD9dnFCAlQ49HfDpK6rPMSRRE1phaUGhpRZmhCqaEJp41NKDM04YWbR0i2KR+DBfWqYVFa+HkrYWhsweHTdRgSqZW6JHKigsoG3P9+Dg6froNKIeCp64birnHx3OyJZOW3wyLw/I3JWPzJXiz74RhCArxx94TEXq3BYhVRVW9G6VmBodTQhDJDY9uv7febW88/XfPH3w5CmNanV2u2YbCgXuWlVGBMfBB+PFqJzPwqBgsP8t3B01j0YR7qmloRqlFj+azRGNveU0MkNzPT4lBZZ8Yrm4/gmU0HEBygxvUjnXNpdIvFivI6M8oMjSgzmM+MOLSPNpS1B4lWa9emYUICvBGh80GE1heROh9E6HzgJeG6MAwW1OsuSdLjx6OVyDpR3es/BZDzWa0iXvvuKF7/7igAYGx8EN6aNVqyn5aInGV++9Lfq38pxP/9Jw9BXVj6u6nFgnJje1iwjzI0dZiuqKg3oyutGwoBCNO0BQVbYGj7tT1AaH0QplVDrXKvaUYGC+p1tvUssgqqIYoih8llzGBqwaIPd+GHwxUAgLvHJ+BP1wzhXjDkEWxLf1c1NGPTnlLc934O3rx9NLxVio7TEu2BoczYhOqG5i69tpdSQLj23KAQqfNBeHuACA1Qy3JFWgYL6nUjYnRQqxSorG/G8Yp69A/jIklydOCUEfd/kIOiahN8vNq2Or8xJUbqsoicSqEQ8MptI1FrasFPxyox573siz7Hx0uBSJ3vOUGh7b4vInQ+0Pt7e2zzOoMF9Tq1SonRcUH4Jb8KmQXVDBYytHFXCZ74ZA+aWqyIDfbFijvGYFiUTuqyiFxCrVJixZ1jcO/qbOwvMbb1M5w1wmAfcWgPEDpfrz49EstgQZJISwxuCxb51ZiVHi91OdRFLRYrnv/iIN77+QQA4PKBofjHjFEI9POWtjAiFwtQq7D+D+OkLkMWGCxIEulJwcB3bTudss9CHsrrmjD/37uQdaJtcbOHruiPhVcNlOxaeSJyTwwWJInRcUHwUgo4bTSjqNqEeL2/1CXRBeQUVuOBD3JRXmeGRq3Cq78bhd8MDZe6LCJyQ/JrNyWP4OOlxMiYQABAJpf3dluiKOL9X05gxsodKK8zY2B4AD6dP4Ghgog6xWBBkklPat83pKBK4krofJpaLPi/j3bjqU/3o8Ui4toRkdjw4AQkhQZIXRoRuTEGC5JMemLbviHc6dT9FFebcPPyn/FJbgmUCgF/vmYIls1Mgb+as6dEdGH8KkGSGR0fBKVCwMmaRpTUNiI60FfqkgjAtiMVeGj9LtSaWqD398Ybt6dgfL8QqcsiIpngiAVJJkCtwvDotrUPMvM5HSI1q1XEmz8cw+xVWag1tWBkjA6fL5jIUEFEDmGwIEmln7W8N0mnrqkF93+Qg5e/PgxRBGamxeLD+8YhiqNIROQgBguSlC1YZDJYSObo6TrcsGw7vjlwGt5KBV64KRkZN42Aj5d7bWxERPLAHguS1NiEYAgCUFDZgHJjE3fE7GX/21uKRz/aDVOzBZE6Hyy/YwxGxQZKXRYRyRhHLEhSOl8vDInQAuCoRW+yWEVkfHkQD/47F6ZmC8Yl6fH5gokMFUTUYwwWJDnbehaZXM+iV9SamnH3qiy8vTUfAHDfZUl4/540hASoJa6MiDwBgwVJjutZ9J5DZUZcv2w7fjxaCV8vJZbdnoLF1wyBSskvBUTkHOyxIMmltTdwHjldj+qGZgT7c6dMVzi7nyI22Bcr7xyLIZFaqcsiIg/DH1NIcsH+3hgY3rZMdBanQ5zOYhXx8teH7P0UE/uH4LN5ExkqiMglGCzILdimQ9jA6VyGxhbcszobb/5wHADw+0sT8d6cVARxVIiIXITBgtyCbTqEO506z9HTdZj+5nZsOVwBtUqBf8wYhT9fO5T9FETkUg59hcnIyEBqaio0Gg3CwsIwffp0HD582FW1UR9iuzLkYJkRBlOLxNXI39f7yzD9ze0oqGxAdKAvPn5gPG4YFS11WUTUBzgULLZu3Yp58+Zhx44d2Lx5M1pbWzFlyhQ0NDS4qj7qI8I0PkgK8YcoAjsLOWrRXVariFc3H8F97+egodmCS5KC8dn8CfY9WYiIXM2hq0K++uqrDvdXrVqFsLAw5OTk4LLLLnNqYdT3pCUGI7+yAZkF1bhySLjU5chOXVMLHv5wN749eBoAMGdCAv50zRB4ceqDiHpRjy43NRgMAIDg4OBOzzGbzTCbzfb7RqOxJ29JHiw9KRjrs4u502k3HK+oxx/W7MTxigZ4qxRYemMybhkTI3VZRNQHdftHGVEU8cgjj2DixIkYPnx4p+dlZGRAp9PZb7Gxsd19S/Jwae1Xhuw7ZUS9uVXiauTju4OnMX3ZdhyvaECkzgcf3TeOoYKIJNPtYDF//nzs2bMH69atu+B5ixcvhsFgsN+Ki4u7+5bk4aIDfRET5AuLVUROYY3U5bg9q1XEG98dxb1rdqLO3IrUhCB8Nn8iRnK/DyKSULemQhYsWIDPPvsM27ZtQ0zMhX8yUqvVUKu5BwF1TXqiHidrTiIzvwqXDwyVuhy3VW9uxaP/2Y2v9pcBAO68JB5PXTcU3ir2UxCRtBwKFqIoYsGCBdiwYQO2bNmCxMREV9VFfVR6YjA+zj3JfUMu4ERlA36/ZieOltfDW6nAX6cPw+9S46Qui4gIgIPBYt68eVi7di0+/fRTaDQalJW1/bSk0+ng6+vrkgKpb7GtZ7H7ZC0amy3w9VZKXJF72XK4HA+t2wVjUyvCNGqsuHMMRscFSV0WEZGdQ+Omy5cvh8FgwKRJkxAZGWm/ffjhh66qj/qYuGA/RGh90GIRsauIfRY2oijirS3HMOe9bBibWjE6LhCbFkxkqCAit+PwVAiRKwmCgLTEYHy2+xQyC6oxvn+I1CVJztTcij/+dw++2FMKAJiZFosl1w+DWsXRHCJyP9w2ndxOepItWHA9i6IqE/7w/k4cKquDl1LAkuuHYVZ6vNRlERF1isGC3I5tp9NdRbUwt1r67E/mPx2txPx1uag1tSAkQI0Vd4zG2ITOF6MjInIHvDaN3E6/UH+EBHjD3GrFnpMGqcvpdaIo4p1t+bjrX5moNbVgZGxbPwVDBRHJAYMFuR1bnwWAPre8d2OzBYs+zMPz/zsIqwjcOiYGH/7hEkTofKQujYioSxgsyC3ZpkMy+9B6FidrTLh5+c/4NO8UVAoBz94wDC/dMgI+Xn1zKoiI5Ik9FuSWbCMWOYU1aLFYPX6Hzp+PV2L+2l2obmiG3t8bb84ajUuS9FKXRUTkMM/+ak2yNShcA52vF0zNFuwr8dw+C1EU8a+fCnDnu1mobmjG8GgtPlswkaGCiGSLwYLckkIhILW9WdFTl/duarHg/z7ajWc3HYDFKuLGlGj89/7xiA7kKrZEJF8MFuS2Lmlf3tsT+yxO1Tbitrd/wSe5JVAqBDx13VC8ettI9lMQkeyxx4Lclq2BM7ugGharCKVCkLgi58jMr8K8tbmorG9GkJ8Xlt0+GhO4wigReQgGC3JbQyI1CFCrUGduxcFSI4ZH66QuqUdEUcQHOwrxzOcH0GoVMSRSi5V3jkFssJ/UpREROQ2nQshtqZQKjE1o22RL7tMh5lYLnvh4L576dD9arSKmjYzCJw+MZ6ggIo/DYEFuzb6ehYwXyjptbMLv3t6BD3cWQyEAi6cOxuszRnFLeCLySJwKIbdmW88i+0Q1rFYRCpn1WeQUVuP+D3JRUWeGztcLb8xMwWUDQ6Uui4jIZRgsyK2NiNHB10uJGlMLjpbXY1CERuqSumxdVhH+8uk+tFhEDArXYOVdYxCv95e6LCIil2KwILfmpVRgTHwQfjpWicyCKrcPFq0WK7Yfr8L6rCJ8ua8MAHBNcgRevmUk/NX870ZEno9f6cjtpSUGtweLatw1LkHqcs4hiiL2lhiwYVcJPt9disp6MwBAEIBHpwzCg5P6QRDkNYVDRNRdDBbk9tLtO51WQxRFt/kmXVRlwsa8EmzMK0F+RYP9eJCfF64bEYXbxsYiOUbel8gSETmKwYLc3sjYQHirFKisNyO/sgH9QgMkq6W6oRlf7DmFDbtKkFtUaz+uVikwZVgEpo+KwmUDQz1+0zQios4wWJDb8/FSYlRsILIKqpFVUN3rwaKx2YJvD57Gxl0l2HqkAq1WEQCgEIAJ/UMwfVQ0fjs8AgHsoSAiYrAgebgkMRhZBdXIzK/CzLQ4l7+fxSri5+OV2LjrFL7aV4qGZov9seHRWkwfFY3rR0YhTOvj8lqIiOSEwYJkIT1JD3x/DJkFruuzEEUR+08Z25swT6G8zmx/LCbIF9NHRWN6ShT6h7n3lSlERFJisCBZSIkLhEohoNTQhJM1jU5dCru42oRP80qwMe8UjpXX248H+nnh2uRI3JgSjTHxQW7TNEpE5M4YLEgW/LxVGBGjQ25RLXbkV/U4WNQ0NOOLvaXYuKsEOwtr7MfVKgWuGhqO6aOicfnAUHir2IRJROQIBguSjbREPXKLapFVUI1bx8Y6/PymFgu+O1iODbtKsPVIOVosbU2YggCM76fHDaOicfXwCGh9vJxdOhFRn8FgQbKRnhSMFVuPO7TTqcUqYkd+FTbuKsGX+8pQb261PzY0UosbU6IxbWQUInRswiQicgYGC5KNsfFBUAhAUbUJpYZGROp8z3ueKIo4UGrEp3mn8GleCU4bzzRhRgf64oZRUZieEo2B4WzCJCJyNgYLkg2NjxeGRemwt8SArIJq3DAqusPjJ2tM9jBx5PSZJkydrxeuaW/CHBsfJLsdUomI5ITBgmQlPTEYe0sM2JHfFiwMphZ7E2bWiTNTJN4qBa4aEoYbRkVj0qBQqFVKCasmIuo7GCxIVtKT9PjnTwXYcrgcf1izE1sOV6DZYgXQ1oR5SaIeN6a0rYSp82UTJhFRb2OwIFlJTQiCIAClhiaUGpoAAIMjNLgxJRrXj4rqtO+CiIh6B4MFyUqgnzdmpcfh5+NVmDI0AtNTojA4Qit1WURE1I7BgmTnuenJUpdARESd4LKCRERE5DQMFkREROQ0DBZERETkNAwWRERE5DQMFkREROQ0DBZERETkNAwWRERE5DQOB4tt27Zh2rRpiIqKgiAI2LhxowvKIiIiIjlyOFg0NDRg5MiRWLZsmSvqISIiIhlzeOXNqVOnYurUqa6ohYiIiGSOPRZERETkNC7fK8RsNsNsNtvvG41GV78lERERScTlIxYZGRnQ6XT2W2xsrKvfkoiIiCTi8mCxePFiGAwG+624uNjVb0lEREQScflUiFqthlqttt8XRREAp0SIiIjkxPZ92/Z9vDMOB4v6+nocO3bMfr+goAB5eXkIDg5GXFzcRZ9fV1cHAJwSISIikqG6ujrodLpOHxfEi0WPX9myZQsmT558zvHZs2fjvffeu+jzrVYrTp06BY1GA0EQHHlr2TMajYiNjUVxcTG0Wq3U5cgWP0fn4OfoHPwcnYOfo3O48nMURRF1dXWIioqCQtF5J4XDIxaTJk266DDIhSgUCsTExHT7+Z5Aq9XyP44T8HN0Dn6OzsHP0Tn4OTqHqz7HC41U2HAdCyIiInIaBgsiIiJyGgaLXqRWq/H00093uEqGHMfP0Tn4OToHP0fn4OfoHO7wOTrcvElERETUGY5YEBERkdMwWBAREZHTMFgQERGR0zBY9IKMjAykpqZCo9EgLCwM06dPx+HDh6UuS9YyMjIgCAIWLVokdSmyVFJSgjvuuAN6vR5+fn4YNWoUcnJypC5LVlpbW/Hkk08iMTERvr6+SEpKwrPPPgur1Sp1aW5t27ZtmDZtGqKioiAIAjZu3NjhcVEUsWTJEkRFRcHX1xeTJk3C/v37pSnWjV3oc2xpacHjjz+O5ORk+Pv7IyoqCnfddRdOnTrVK7UxWPSCrVu3Yt68edixYwc2b96M1tZWTJkyBQ0NDVKXJkvZ2dlYuXIlRowYIXUpslRTU4MJEybAy8sLX375JQ4cOIBXXnkFgYGBUpcmKy+++CJWrFiBZcuW4eDBg3jppZfw8ssv44033pC6NLfW0NCAkSNHYtmyZed9/KWXXsKrr76KZcuWITs7GxEREfjNb35j3w6C2lzoczSZTMjNzcVTTz2F3NxcfPLJJzhy5Aiuv/763ilOpF5XXl4uAhC3bt0qdSmyU1dXJw4YMEDcvHmzePnll4sLFy6UuiTZefzxx8WJEydKXYbsXXvtteLcuXM7HLvpppvEO+64Q6KK5AeAuGHDBvt9q9UqRkREiC+88IL9WFNTk6jT6cQVK1ZIUKE8/PpzPJ+srCwRgFhYWOjyejhiIQGDwQAACA4OlrgS+Zk3bx6uvfZaXHXVVVKXIlufffYZxo4di1tvvRVhYWFISUnBO++8I3VZsjNx4kR89913OHLkCABg9+7d+Omnn3DNNddIXJl8FRQUoKysDFOmTLEfU6vVuPzyy/Hzzz9LWJn8GQwGCILQKyOTLt82nToSRRGPPPIIJk6ciOHDh0tdjqysX78eubm5yM7OlroUWcvPz8fy5cvxyCOP4E9/+hOysrLw0EMPQa1W46677pK6PNl4/PHHYTAYMHjwYCiVSlgsFjz//POYOXOm1KXJVllZGQAgPDy8w/Hw8HAUFhZKUZJHaGpqwhNPPIHbb7+9V/ZhYbDoZfPnz8eePXvw008/SV2KrBQXF2PhwoX45ptv4OPjI3U5sma1WjF27FgsXboUAJCSkoL9+/dj+fLlDBYO+PDDD/HBBx9g7dq1GDZsGPLy8rBo0SJERUVh9uzZUpcna7/e+VoUxT63G7aztLS0YMaMGbBarXjrrbd65T0ZLHrRggUL8Nlnn2Hbtm19fodXR+Xk5KC8vBxjxoyxH7NYLNi2bRuWLVsGs9kMpVIpYYXyERkZiaFDh3Y4NmTIEHz88ccSVSRPf/zjH/HEE09gxowZAIDk5GQUFhYiIyODwaKbIiIiALSNXERGRtqPl5eXnzOKQRfX0tKC2267DQUFBfj+++97bddY9lj0AlEUMX/+fHzyySf4/vvvkZiYKHVJsnPllVdi7969yMvLs9/Gjh2LWbNmIS8vj6HCARMmTDjncucjR44gPj5eoorkyWQyQaHo+CVUqVTyctMeSExMREREBDZv3mw/1tzcjK1bt2L8+PESViY/tlBx9OhRfPvtt9Dr9b323hyx6AXz5s3D2rVr8emnn0Kj0djnEXU6HXx9fSWuTh40Gs05PSn+/v7Q6/XsVXHQww8/jPHjx2Pp0qW47bbbkJWVhZUrV2LlypVSlyYr06ZNw/PPP4+4uDgMGzYMu3btwquvvoq5c+dKXZpbq6+vx7Fjx+z3CwoKkJeXh+DgYMTFxWHRokVYunQpBgwYgAEDBmDp0qXw8/PD7bffLmHV7udCn2NUVBRuueUW5ObmYtOmTbBYLPbvO8HBwfD29nZtcS6/7oREAOe9rVq1SurSZI2Xm3bf559/Lg4fPlxUq9Xi4MGDxZUrV0pdkuwYjUZx4cKFYlxcnOjj4yMmJSWJf/7zn0Wz2Sx1aW7thx9+OO/Xw9mzZ4ui2HbJ6dNPPy1GRESIarVavOyyy8S9e/dKW7QbutDnWFBQ0On3nR9++MHltXF3UyIiInIa9lgQERGR0zBYEBERkdMwWBAREZHTMFgQERGR0zBYEBERkdMwWBAREZHTMFgQERGR0zBYEBERkdMwWBCR5JYsWYJRo0ZJXQYROQGDBRH1KkEQsHHjRqnLICIXYbAgIiIip2GwIOqjJk2ahAULFmDRokUICgpCeHg4Vq5ciYaGBsyZMwcajQb9+vXDl19+aX/O1q1bkZaWBrVajcjISDzxxBNobW3t8JoPPfQQHnvsMQQHByMiIgJLliyxP56QkAAAuPHGGyEIgv2+zfvvv4+EhATodDrMmDEDdXV1rvwIiMgFGCyI+rDVq1cjJCQEWVlZWLBgAR544AHceuutGD9+PHJzc/Hb3/4Wd955J0wmE0pKSnDNNdcgNTUVu3fvxvLly/Huu+/iueeeO+c1/f39kZmZiZdeegnPPvssNm/eDADIzs4GAKxatQqlpaX2+wBw/PhxbNy4EZs2bcKmTZuwdetWvPDCC733YRCRU3B3U6I+atKkSbBYLPjxxx8BABaLBTqdDjfddBPWrFkDACgrK0NkZCR++eUXfP755/j4449x8OBBCIIAAHjrrbfw+OOPw2AwQKFQnPOaAJCWloYrrrjCHhIEQcCGDRswffp0+zlLlizByy+/jLKyMmg0GgDAY489hm3btmHHjh298XEQkZNwxIKoDxsxYoT990qlEnq9HsnJyfZj4eHhAIDy8nIcPHgQ48aNs4cKAJgwYQLq6+tx8uTJ874mAERGRqK8vPyitSQkJNhDhSPPIyL3wmBB1Id5eXl1uC8IQodjthBhtVohimKHUAEAtgHPs4+f7zWtVmu3aunK84jIvTBYEFGXDB06FD///DPOnj39+eefodFoEB0d3eXX8fLygsVicUWJROQGGCyIqEsefPBBFBcXY8GCBTh06BA+/fRTPP3003jkkUegUHT9S0lCQgK+++47lJWVoaamxoUVE5EUGCyIqEuio6Pxv//9D1lZWRg5ciTuv/9+3HPPPXjyyScdep1XXnkFmzdvRmxsLFJSUlxULRFJhVeFEBERkdNwxIKIiIichsGCiIiInIbBgoiIiJyGwYKIiIichsGCiIiInIbBgoiIiJyGwYKIiIichsGCiIiInIbBgoiIiJyGwYKIiIichsGCiIiInIbBgoiIiJzm/wGy7Pt637fT0gAAAABJRU5ErkJggg==", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "# basic plots for all rides (not just in the program area)\n", - "df_2020.groupby(\"month\").agg({'ID':'count'}).orderBy(F.col('month').asc()).toPandas().plot(x=\"month\",y=\"count(ID)\")" - ] - }, - { - "cell_type": "code", - "execution_count": 20, - "id": "90914451-ac49-44f6-98d5-4eb6b5f8dbf6", - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - " \r" - ] - }, - { - "data": { - "text/plain": [ - "" - ] - }, - "execution_count": 20, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAhoAAAHACAYAAADk9MHyAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjQuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/MnkTPAAAACXBIWXMAAA9hAAAPYQGoP6dpAABvxElEQVR4nO3dd3hUZdoG8HtaJj1AICSB0EvoRJoIKM2C6MraFQV1XVdFFtRd+HB1dVcF3V3sinVRFAVZxYIVCyAondAJHUIJIZT0TH2/P2bOmZKZybQzmZncv+vKpSST5BwSMk+e9qqEEAJEREREClA39gUQERFR/GKgQURERIphoEFERESKYaBBREREimGgQURERIphoEFERESKYaBBREREimGgQURERIphoEFERESKYaBBREREimm0QGPVqlW4+uqrkZubC5VKhc8++yzgjyGEwH/+8x9069YNer0eeXl5mD17dvgvloiIiIKibaxPXF1djX79+uHOO+/EddddF9THmDZtGr7//nv85z//QZ8+fVBeXo6ysrIwXykREREFSxUNh6qpVCosXboUEyZMkF9nNBrx6KOPYuHChTh//jx69+6NZ599FiNHjgQA7N69G3379sWOHTvQvXv3xrlwIiIi8ilqezTuvPNOrFmzBosWLcK2bdtwww034IorrsC+ffsAAF9++SU6deqEZcuWoWPHjujQoQPuvvtunD17tpGvnIiIiCRRGWgcOHAAH330EZYsWYIRI0agc+fO+Mtf/oLhw4dj/vz5AICDBw/iyJEjWLJkCRYsWIB3330XmzZtwvXXX9/IV09ERESSRuvR8GXz5s0QQqBbt24urzcYDMjMzAQAWK1WGAwGLFiwQH7cO++8gwEDBqCoqIjlFCIioigQlYGG1WqFRqPBpk2boNFoXN6WmpoKAMjJyYFWq3UJRnr06AEAOHr0KAMNIiKiKBCVgUZBQQEsFgtKS0sxYsQIj48ZNmwYzGYzDhw4gM6dOwMA9u7dCwBo3759xK6ViIiIvGu0qZOqqirs378fgC2weO655zBq1Ci0aNEC7dq1w2233YY1a9Zg7ty5KCgoQFlZGX766Sf06dMHV155JaxWKwYNGoTU1FS88MILsFqtmDJlCtLT0/H99983xi0RERGRm0YLNFasWIFRo0bVe/3kyZPx7rvvwmQy4amnnsKCBQtw/Phx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LbFr1y4xbdo0kZKSIo4cOdLYlxaSr7/+Wvztb38Tn3zyiQAgli5d6vL2Z555RqSlpYlPPvlEbN++Xdx0000iJydHVFRUNM4Fh+Dyyy8X8+fPFzt27BCFhYVi/Pjxol27dqKqqkp+TLzc7xdffCG++uorUVRUJIqKisQjjzwidDqd2LFjhxAifu7T3fr160WHDh1E3759xbRp0+TXx9P9Pv7446JXr17i5MmT8ktpaan89ni617Nnz4r27duLO+64Q6xbt04cOnRI/PDDD2L//v3yY+LpfktLS12+rsuXLxcAxM8//yyEiK97feqpp0RmZqZYtmyZOHTokFiyZIlITU0VL7zwgvyYcNxvTAUagwcPFvfee6/L6/Lz88X//d//NdIVhZ97oGG1WkV2drZ45pln5NfV1dWJjIwM8frrrzfCFYZXaWmpACBWrlwphIj/+23evLl4++234/Y+KysrRdeuXcXy5cvFJZdcIgca8Xa/jz/+uOjXr5/Ht8Xbvc6cOVMMHz7c69vj7X7dTZs2TXTu3FlYrda4u9fx48eLu+66y+V11157rbjtttuEEOH72sZM6cRoNGLTpk247LLLXF5/2WWX4ddff22kq1LeoUOHUFJS4nLfer0el1xySVzcd3l5OQCgRYsWAOL3fi0WCxYtWoTq6moMHTo0bu9zypQpGD9+PMaOHevy+ni833379iE3NxcdO3bEzTffjIMHDwKIv3v94osvMHDgQNxwww3IyspCQUEB3nrrLfnt8Xa/zoxGIz744APcddddUKlUcXevw4cPx48//oi9e/cCALZu3YrVq1fjyiuvBBC+r23EzzoJVllZGSwWC1q3bu3y+tatW6OkpKSRrkp50r15uu8jR440xiWFjRACDz30EIYPH47evXsDiL/73b59O4YOHYq6ujqkpqZi6dKl6Nmzp/yPNF7uEwAWLVqEzZs3Y8OGDfXeFm9f1yFDhmDBggXo1q0bTp06haeeegoXXXQRdu7cGXf3evDgQcybNw8PPfQQHnnkEaxfvx5//vOfodfrMWnSpLi7X2efffYZzp8/jzvuuANA/H0fz5w5E+Xl5cjPz4dGo4HFYsHTTz+NW265BUD47jdmAg2J+4mvQoigToGNNfF43w888AC2bduG1atX13tbvNxv9+7dUVhYiPPnz+OTTz7B5MmTsXLlSvnt8XKfxcXF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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "df_2020.groupby(\"pickup_area\").agg({'ID':'count'}).orderBy(F.col('pickup_area').asc()).toPandas().plot(x=\"pickup_area\",y=\"count(ID)\")" - ] - }, - { - "cell_type": "code", - "execution_count": 22, - "id": "5758417d-edcd-448a-9535-16f5b9c1528a", - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - " \r" - ] - }, - { - "data": { - "text/plain": [ - "" - ] - }, - "execution_count": 22, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAhoAAAHACAYAAADk9MHyAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjQuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/MnkTPAAAACXBIWXMAAA9hAAAPYQGoP6dpAABxBklEQVR4nO3dd3zTdf4H8FdW011mKYVS9h6WKUMFQTwED86tqKjneS7ErTjvXOg5zo2i/FDOgYfrcAMqQxQZsmeZLbNA6W6TJvn8/ki+33yTpmnG95sm6ev5ePShTdP0G1rIu+/10QkhBIiIiIg0oG/sCyAiIqL4xUCDiIiINMNAg4iIiDTDQIOIiIg0w0CDiIiINMNAg4iIiDTDQIOIiIg0w0CDiIiINMNAg4iIiDTDQIOIiIg002iBxooVK3DhhRciOzsbOp0OX375ZdCPIYTACy+8gO7du8NsNiMnJwfPPPOM+hdLREREITE21heurKzEgAEDcP311+Piiy8O6TFmzJiBxYsX44UXXkC/fv1QWlqKkydPqnylREREFCpdNByqptPp8MUXX2DKlCnybVarFY888gg+/PBDlJSUoG/fvnjuuecwevRoAMCOHTvQv39/bN26FT169GicCyciIiK/orZH4/rrr8eqVauwYMECbN68GZdeein+9Kc/IT8/HwDw1VdfoXPnzvj666/RqVMndOzYETfeeCOKi4sb+cqJiIhIEpWBxt69e/Hxxx9j4cKFOOuss9ClSxfce++9GDVqFObNmwcA2LdvHw4ePIiFCxdi/vz5eO+997B+/XpccskljXz1REREJGm0Hg1//vjjDwgh0L17d4/bLRYLWrZsCQBwOBywWCyYP3++fL+5c+di0KBB2LVrF8spREREUSAqAw2HwwGDwYD169fDYDB4fCw1NRUA0LZtWxiNRo9gpFevXgCAgoICBhpERERRICoDjby8PNjtdhQVFeGss87yeZ+RI0fCZrNh79696NKlCwBg9+7dAIDc3NyIXSsRERHVr9GmTioqKrBnzx4AzsDipZdewpgxY9CiRQt06NABV199NVatWoUXX3wReXl5OHnyJH766Sf069cPF1xwARwOB4YMGYLU1FS8/PLLcDgcuO2225Ceno7Fixc3xlMiIiIiL40WaCxbtgxjxoypc/u0adPw3nvvoba2Fk899RTmz5+Pw4cP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7t1i1apVIi8vT1x33XXy582dO1d8++23Yu/eveK3334TZ555ppgwYYI63xgiahADDaIoV15eLhISEsSCBQvk206dOiWSkpI8Ao0pU6Z4fN5VV10lzjvvPI/b7rvvPtG7d2/5/dzcXPGnP/3J4z6XX365/EK8ePFiYTAYREFBgfzxbdu2yUGEEEJs2LBBABD79++X7+PrtmD17t1bvPbaax7X6v0cr7nmGnHTTTd53LZy5Uqh1+tFdXW1z8dds2aNACDKy8tDvjYiChxLJ0RRbu/evbBarRg+fLh8W4sWLdCjRw+P+w0ePNjj/R07dmDkyJEet40cORL5+fmw2+3ybcrHld7fsWOH/Bg5OTnIycmRP967d280a9ZMvo8aKisrcf/998uPnZqaip07d6KgoMDjft7Pcf369XjvvfeQmpoqv51//vlwOBzYv38/AGDDhg2YPHkycnNzkZaWhtGjRwNAnccmIm1w6oQoygkhArpfSkpKnc/T6XQhPZb0eb4ew9/tobrvvvvwww8/4IUXXkDXrl2RlJSESy65pE7Dp/dzdDgc+Pvf/4477rijzmN26NABlZWVGD9+PMaPH48PPvgArVu3RkFBAc4//3w2kxJFCAMNoijXtWtXmEwmrF69Gh06dAAAnD59Grt378Y555xT7+f17t0bv/zyi8dtv/76K7p37w6DwSDftnr1ao/7rF69Gj179pQfo6CgAIWFhXJWY/v27SgtLUWvXr1UeX4AsHLlSlx33XX4y1/+AgCoqKhosIEUAAYOHIht27aha9euPj++ZcsWnDx5Es8++6x8/evWrVPtuomoYSydEEW51NRU/PWvf8V9992HH3/8EVu3bsV1110Hvd7/X9977rkHP/74I5588kns3r0b77//Pl5//XXce++9HvdbtWoV/vWvf2H37t144403sHDhQsyYMQMAMG7cOPTv3x9Tp07FH3/8gTVr1uDaa6/FOeecU6eMEY6uXbvi888/x8aNG7Fp0yZcddVVcDgcDX7eAw88gN9++w233XYbNm7ciPz8fCxatAjTp08H4MxqJCQk4LXXXsO+ffuwaNEiPPnkk6pdNxE1jIEGUQx4/vnncfbZZ+PPf/4zxo0bh1GjRmHQoEF+P2fgwIH473//iwULFqBv37547LHH8MQTT+C6667zuN8999yD9evXIy8vD08++SRefPFFnH/++QCcJZQvv/wSzZs3x9lnn41x48ahc+fO+OSTT1R9fv/+97/RvHlzjBgxAhdeeCHOP/98DBw4sMHP69+/P5YvX478/HycddZZyMvLw6OPPoq2bdsCAFq3bo333nsPCxcuRO/evfHss8/ihRdeUPXaicg/nQi0aEtEcadjx4648847o2aVORHFH2Y0iIiISDMMNIhIc3369PEYQVW+ffjhh419eUSkIZZOiEhzBw8eRG1trc+PtWnTBmlpaRG+IiKKFAYaREREpBmWToiIiEgzDDSIiIhIMww0iIiISDMMNIiIiEgzDDSIiIhIMww0iIiISDMMNIiIiEgzDDSIiIhIM/8PaJ2roAlqbpkAAAAASUVORK5CYII=", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "df_2020.groupby(\"dropoff_area\").agg({'ID':'count'}).orderBy(F.col('dropoff_area').asc()).toPandas().plot(x=\"dropoff_area\",y=\"count(ID)\")" - ] - }, - { - "cell_type": "markdown", - "id": "8cd74633-8919-4376-8b5f-a512aa3ee28a", - "metadata": {}, - "source": [ - "# Next Steps\n", - "Filter the in-area dataframe to only include rides with a fare under 15, and rides within the timeframe for the given year.\n", - "\n", - "plot rides by hour\n", - "\n", - "\n", - "## we still don't know how to do these, if you figure it out pls share\n", - "the geospatial ipynb (notebook 4.8) from ashish shows some ways to work with this kind of data in pyspark\n", - "\n", - "Plot Cloropleths (for all of chicago)\n", - "\n", - "heat map of dropoff location and pickup location (for in-program rides)\n", - "\n", - "for 2020 - think about how to show the september to october switch - vline when program starts\n", - "\n", - "add vertical lines at and key shifts in the program policy" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "PySpark", - "language": "python", - "name": "pyspark" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.8.15" - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} diff --git a/eda_2021.ipynb b/eda_2021.ipynb deleted file mode 100644 index 452e6af..0000000 --- a/eda_2021.ipynb +++ /dev/null @@ -1,914 +0,0 @@ -{ - "cells": [ - { - "cell_type": "code", - "execution_count": 57, - "id": "201288da-86ac-4db0-a56b-4d75e26e1753", - "metadata": {}, - "outputs": [], - "source": [ - "from pyspark.sql import SparkSession\n", - "from pyspark.sql import functions as F\n", - "\n", - "import matplotlib.pyplot as plt\n", - "%matplotlib inline" - ] - }, - { - "cell_type": "code", - "execution_count": 58, - "id": "3443992c-4530-48f2-a133-fb1dacf4b84f", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "[('spark.stage.maxConsecutiveAttempts', '10'),\n", - " ('spark.dynamicAllocation.minExecutors', '1'),\n", - " ('spark.eventLog.enabled', 'true'),\n", - " ('spark.submit.pyFiles',\n", - " '/root/.ivy2/jars/com.johnsnowlabs.nlp_spark-nlp_2.12-4.4.0.jar,/root/.ivy2/jars/graphframes_graphframes-0.8.2-spark3.1-s_2.12.jar,/root/.ivy2/jars/com.typesafe_config-1.4.2.jar,/root/.ivy2/jars/org.rocksdb_rocksdbjni-6.29.5.jar,/root/.ivy2/jars/com.amazonaws_aws-java-sdk-bundle-1.11.828.jar,/root/.ivy2/jars/com.github.universal-automata_liblevenshtein-3.0.0.jar,/root/.ivy2/jars/com.google.cloud_google-cloud-storage-2.16.0.jar,/root/.ivy2/jars/com.navigamez_greex-1.0.jar,/root/.ivy2/jars/com.johnsnowlabs.nlp_tensorflow-cpu_2.12-0.4.4.jar,/root/.ivy2/jars/it.unimi.dsi_fastutil-7.0.12.jar,/root/.ivy2/jars/org.projectlombok_lombok-1.16.8.jar,/root/.ivy2/jars/com.google.guava_guava-31.1-jre.jar,/root/.ivy2/jars/com.google.guava_failureaccess-1.0.1.jar,/root/.ivy2/jars/com.google.guava_listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar,/root/.ivy2/jars/com.google.errorprone_error_prone_annotations-2.16.jar,/root/.ivy2/jars/com.google.j2objc_j2objc-annotations-1.3.jar,/root/.ivy2/jars/com.google.http-client_google-http-client-1.42.3.jar,/root/.ivy2/jars/io.opencensus_opencensus-contrib-http-util-0.31.1.jar,/root/.ivy2/jars/com.google.http-client_google-http-client-jackson2-1.42.3.jar,/root/.ivy2/jars/com.google.http-client_google-http-client-gson-1.42.3.jar,/root/.ivy2/jars/com.google.api-client_google-api-client-2.1.1.jar,/root/.ivy2/jars/commons-codec_commons-codec-1.15.jar,/root/.ivy2/jars/com.google.oauth-client_google-oauth-client-1.34.1.jar,/root/.ivy2/jars/com.google.http-client_google-http-client-apache-v2-1.42.3.jar,/root/.ivy2/jars/com.google.apis_google-api-services-storage-v1-rev20220705-2.0.0.jar,/root/.ivy2/jars/com.google.code.gson_gson-2.10.jar,/root/.ivy2/jars/com.google.cloud_google-cloud-core-2.9.0.jar,/root/.ivy2/jars/com.google.auto.value_auto-value-annotations-1.10.1.jar,/root/.ivy2/jars/com.google.cloud_google-cloud-core-http-2.9.0.jar,/root/.ivy2/jars/com.google.http-client_google-http-client-appengine-1.42.3.jar,/root/.ivy2/jars/com.google.api_gax-httpjson-0.105.1.jar,/root/.ivy2/jars/com.google.cloud_google-cloud-core-grpc-2.9.0.jar,/root/.ivy2/jars/io.grpc_grpc-core-1.51.0.jar,/root/.ivy2/jars/com.google.api_gax-2.20.1.jar,/root/.ivy2/jars/com.google.api_gax-grpc-2.20.1.jar,/root/.ivy2/jars/io.grpc_grpc-alts-1.51.0.jar,/root/.ivy2/jars/io.grpc_grpc-grpclb-1.51.0.jar,/root/.ivy2/jars/org.conscrypt_conscrypt-openjdk-uber-2.5.2.jar,/root/.ivy2/jars/io.grpc_grpc-protobuf-1.51.0.jar,/root/.ivy2/jars/com.google.auth_google-auth-library-credentials-1.13.0.jar,/root/.ivy2/jars/com.google.auth_google-auth-library-oauth2-http-1.13.0.jar,/root/.ivy2/jars/com.google.api_api-common-2.2.2.jar,/root/.ivy2/jars/javax.annotation_javax.annotation-api-1.3.2.jar,/root/.ivy2/jars/io.opencensus_opencensus-api-0.31.1.jar,/root/.ivy2/jars/io.grpc_grpc-context-1.51.0.jar,/root/.ivy2/jars/com.google.api.grpc_proto-google-iam-v1-1.6.22.jar,/root/.ivy2/jars/com.google.protobuf_protobuf-java-3.21.10.jar,/root/.ivy2/jars/com.google.protobuf_protobuf-java-util-3.21.10.jar,/root/.ivy2/jars/com.google.api.grpc_proto-google-common-protos-2.11.0.jar,/root/.ivy2/jars/org.threeten_threetenbp-1.6.4.jar,/root/.ivy2/jars/com.google.api.grpc_proto-google-cloud-storage-v2-2.16.0-alpha.jar,/root/.ivy2/jars/com.google.api.grpc_grpc-google-cloud-storage-v2-2.16.0-alpha.jar,/root/.ivy2/jars/com.google.api.grpc_gapic-google-cloud-storage-v2-2.16.0-alpha.jar,/root/.ivy2/jars/com.fasterxml.jackson.core_jackson-core-2.14.1.jar,/root/.ivy2/jars/com.google.code.findbugs_jsr305-3.0.2.jar,/root/.ivy2/jars/io.grpc_grpc-api-1.51.0.jar,/root/.ivy2/jars/io.grpc_grpc-auth-1.51.0.jar,/root/.ivy2/jars/io.grpc_grpc-stub-1.51.0.jar,/root/.ivy2/jars/org.checkerframework_checker-qual-3.28.0.jar,/root/.ivy2/jars/com.google.api.grpc_grpc-google-iam-v1-1.6.22.jar,/root/.ivy2/jars/io.grpc_grpc-protobuf-lite-1.51.0.jar,/root/.ivy2/jars/com.google.android_annotations-4.1.1.4.jar,/root/.ivy2/jars/org.codehaus.mojo_animal-sniffer-annotations-1.22.jar,/root/.ivy2/jars/io.grpc_grpc-netty-shaded-1.51.0.jar,/root/.ivy2/jars/io.perfmark_perfmark-api-0.26.0.jar,/root/.ivy2/jars/io.grpc_grpc-googleapis-1.51.0.jar,/root/.ivy2/jars/io.grpc_grpc-xds-1.51.0.jar,/root/.ivy2/jars/io.opencensus_opencensus-proto-0.2.0.jar,/root/.ivy2/jars/io.grpc_grpc-services-1.51.0.jar,/root/.ivy2/jars/com.google.re2j_re2j-1.6.jar,/root/.ivy2/jars/dk.brics.automaton_automaton-1.11-8.jar,/root/.ivy2/jars/org.slf4j_slf4j-api-1.7.16.jar'),\n", - " ('spark.dataproc.sql.joinConditionReorder.enabled', 'true'),\n", - " ('spark.kryoserializer.buffer.max', '2000M'),\n", - " ('spark.serializer', 'org.apache.spark.serializer.KryoSerializer'),\n", - " ('spark.dataproc.sql.local.rank.pushdown.enabled', 'true'),\n", - " ('spark.driver.maxResultSize', '0'),\n", - " ('spark.yarn.unmanagedAM.enabled', 'true'),\n", - " ('spark.sql.autoBroadcastJoinThreshold', '43m'),\n", - " ('spark.ui.filters',\n", - " 'org.apache.hadoop.yarn.server.webproxy.amfilter.AmIpFilter'),\n", - " ('spark.org.apache.hadoop.yarn.server.webproxy.amfilter.AmIpFilter.param.PROXY_URI_BASES',\n", - " 'http://hub-msca-bdp-dphub-students-abejburton-m:8088/proxy/application_1699633504496_0001'),\n", - " ('spark.metrics.namespace',\n", - " 'app_name:${spark.app.name}.app_id:${spark.app.id}'),\n", - " ('spark.executor.memory', '4g'),\n", - " ('spark.dataproc.sql.optimizer.leftsemijoin.conversion.enabled', 'true'),\n", - " ('spark.hadoop.hive.execution.engine', 'mr'),\n", - " ('spark.executor.id', 'driver'),\n", - " ('spark.app.startTime', '1699634010505'),\n", - " ('spark.driver.port', '35733'),\n", - " ('spark.hadoop.mapreduce.fileoutputcommitter.algorithm.version', '2'),\n", - " ('spark.dynamicAllocation.maxExecutors', '10000'),\n", - " ('spark.org.apache.hadoop.yarn.server.webproxy.amfilter.AmIpFilter.param.PROXY_HOSTS',\n", - " 'hub-msca-bdp-dphub-students-abejburton-m'),\n", - " ('spark.yarn.dist.pyFiles',\n", - " 'file:///root/.ivy2/jars/com.johnsnowlabs.nlp_spark-nlp_2.12-4.4.0.jar,file:///root/.ivy2/jars/graphframes_graphframes-0.8.2-spark3.1-s_2.12.jar,file:///root/.ivy2/jars/com.typesafe_config-1.4.2.jar,file:///root/.ivy2/jars/org.rocksdb_rocksdbjni-6.29.5.jar,file:///root/.ivy2/jars/com.amazonaws_aws-java-sdk-bundle-1.11.828.jar,file:///root/.ivy2/jars/com.github.universal-automata_liblevenshtein-3.0.0.jar,file:///root/.ivy2/jars/com.google.cloud_google-cloud-storage-2.16.0.jar,file:///root/.ivy2/jars/com.navigamez_greex-1.0.jar,file:///root/.ivy2/jars/com.johnsnowlabs.nlp_tensorflow-cpu_2.12-0.4.4.jar,file:///root/.ivy2/jars/it.unimi.dsi_fastutil-7.0.12.jar,file:///root/.ivy2/jars/org.projectlombok_lombok-1.16.8.jar,file:///root/.ivy2/jars/com.google.guava_guava-31.1-jre.jar,file:///root/.ivy2/jars/com.google.guava_failureaccess-1.0.1.jar,file:///root/.ivy2/jars/com.google.guava_listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar,file:///root/.ivy2/jars/com.google.errorprone_error_prone_annotations-2.16.jar,file:///root/.ivy2/jars/com.google.j2objc_j2objc-annotations-1.3.jar,file:///root/.ivy2/jars/com.google.http-client_google-http-client-1.42.3.jar,file:///root/.ivy2/jars/io.opencensus_opencensus-contrib-http-util-0.31.1.jar,file:///root/.ivy2/jars/com.google.http-client_google-http-client-jackson2-1.42.3.jar,file:///root/.ivy2/jars/com.google.http-client_google-http-client-gson-1.42.3.jar,file:///root/.ivy2/jars/com.google.api-client_google-api-client-2.1.1.jar,file:///root/.ivy2/jars/commons-codec_commons-codec-1.15.jar,file:///root/.ivy2/jars/com.google.oauth-client_google-oauth-client-1.34.1.jar,file:///root/.ivy2/jars/com.google.http-client_google-http-client-apache-v2-1.42.3.jar,file:///root/.ivy2/jars/com.google.apis_google-api-services-storage-v1-rev20220705-2.0.0.jar,file:///root/.ivy2/jars/com.google.code.gson_gson-2.10.jar,file:///root/.ivy2/jars/com.google.cloud_google-cloud-core-2.9.0.jar,file:///root/.ivy2/jars/com.google.auto.value_auto-value-annotations-1.10.1.jar,file:///root/.ivy2/jars/com.google.cloud_google-cloud-core-http-2.9.0.jar,file:///root/.ivy2/jars/com.google.http-client_google-http-client-appengine-1.42.3.jar,file:///root/.ivy2/jars/com.google.api_gax-httpjson-0.105.1.jar,file:///root/.ivy2/jars/com.google.cloud_google-cloud-core-grpc-2.9.0.jar,file:///root/.ivy2/jars/io.grpc_grpc-core-1.51.0.jar,file:///root/.ivy2/jars/com.google.api_gax-2.20.1.jar,file:///root/.ivy2/jars/com.google.api_gax-grpc-2.20.1.jar,file:///root/.ivy2/jars/io.grpc_grpc-alts-1.51.0.jar,file:///root/.ivy2/jars/io.grpc_grpc-grpclb-1.51.0.jar,file:///root/.ivy2/jars/org.conscrypt_conscrypt-openjdk-uber-2.5.2.jar,file:///root/.ivy2/jars/io.grpc_grpc-protobuf-1.51.0.jar,file:///root/.ivy2/jars/com.google.auth_google-auth-library-credentials-1.13.0.jar,file:///root/.ivy2/jars/com.google.auth_google-auth-library-oauth2-http-1.13.0.jar,file:///root/.ivy2/jars/com.google.api_api-common-2.2.2.jar,file:///root/.ivy2/jars/javax.annotation_javax.annotation-api-1.3.2.jar,file:///root/.ivy2/jars/io.opencensus_opencensus-api-0.31.1.jar,file:///root/.ivy2/jars/io.grpc_grpc-context-1.51.0.jar,file:///root/.ivy2/jars/com.google.api.grpc_proto-google-iam-v1-1.6.22.jar,file:///root/.ivy2/jars/com.google.protobuf_protobuf-java-3.21.10.jar,file:///root/.ivy2/jars/com.google.protobuf_protobuf-java-util-3.21.10.jar,file:///root/.ivy2/jars/com.google.api.grpc_proto-google-common-protos-2.11.0.jar,file:///root/.ivy2/jars/org.threeten_threetenbp-1.6.4.jar,file:///root/.ivy2/jars/com.google.api.grpc_proto-google-cloud-storage-v2-2.16.0-alpha.jar,file:///root/.ivy2/jars/com.google.api.grpc_grpc-google-cloud-storage-v2-2.16.0-alpha.jar,file:///root/.ivy2/jars/com.google.api.grpc_gapic-google-cloud-storage-v2-2.16.0-alpha.jar,file:///root/.ivy2/jars/com.fasterxml.jackson.core_jackson-core-2.14.1.jar,file:///root/.ivy2/jars/com.google.code.findbugs_jsr305-3.0.2.jar,file:///root/.ivy2/jars/io.grpc_grpc-api-1.51.0.jar,file:///root/.ivy2/jars/io.grpc_grpc-auth-1.51.0.jar,file:///root/.ivy2/jars/io.grpc_grpc-stub-1.51.0.jar,file:///root/.ivy2/jars/org.checkerframework_checker-qual-3.28.0.jar,file:///root/.ivy2/jars/com.google.api.grpc_grpc-google-iam-v1-1.6.22.jar,file:///root/.ivy2/jars/io.grpc_grpc-protobuf-lite-1.51.0.jar,file:///root/.ivy2/jars/com.google.android_annotations-4.1.1.4.jar,file:///root/.ivy2/jars/org.codehaus.mojo_animal-sniffer-annotations-1.22.jar,file:///root/.ivy2/jars/io.grpc_grpc-netty-shaded-1.51.0.jar,file:///root/.ivy2/jars/io.perfmark_perfmark-api-0.26.0.jar,file:///root/.ivy2/jars/io.grpc_grpc-googleapis-1.51.0.jar,file:///root/.ivy2/jars/io.grpc_grpc-xds-1.51.0.jar,file:///root/.ivy2/jars/io.opencensus_opencensus-proto-0.2.0.jar,file:///root/.ivy2/jars/io.grpc_grpc-services-1.51.0.jar,file:///root/.ivy2/jars/com.google.re2j_re2j-1.6.jar,file:///root/.ivy2/jars/dk.brics.automaton_automaton-1.11-8.jar,file:///root/.ivy2/jars/org.slf4j_slf4j-api-1.7.16.jar'),\n", - " ('spark.dataproc.metrics.listener.metrics.collector.hostname',\n", - " 'hub-msca-bdp-dphub-students-abejburton-m'),\n", - " ('spark.yarn.am.attemptFailuresValidityInterval', '1h'),\n", - " ('spark.app.name', 'Spark Updated Conf'),\n", - " ('spark.sql.catalogImplementation', 'hive'),\n", - " ('spark.executorEnv.OPENBLAS_NUM_THREADS', '1'),\n", - " ('spark.yarn.secondary.jars',\n", - " 'com.johnsnowlabs.nlp_spark-nlp_2.12-4.4.0.jar,graphframes_graphframes-0.8.2-spark3.1-s_2.12.jar,com.typesafe_config-1.4.2.jar,org.rocksdb_rocksdbjni-6.29.5.jar,com.amazonaws_aws-java-sdk-bundle-1.11.828.jar,com.github.universal-automata_liblevenshtein-3.0.0.jar,com.google.cloud_google-cloud-storage-2.16.0.jar,com.navigamez_greex-1.0.jar,com.johnsnowlabs.nlp_tensorflow-cpu_2.12-0.4.4.jar,it.unimi.dsi_fastutil-7.0.12.jar,org.projectlombok_lombok-1.16.8.jar,com.google.guava_guava-31.1-jre.jar,com.google.guava_failureaccess-1.0.1.jar,com.google.guava_listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar,com.google.errorprone_error_prone_annotations-2.16.jar,com.google.j2objc_j2objc-annotations-1.3.jar,com.google.http-client_google-http-client-1.42.3.jar,io.opencensus_opencensus-contrib-http-util-0.31.1.jar,com.google.http-client_google-http-client-jackson2-1.42.3.jar,com.google.http-client_google-http-client-gson-1.42.3.jar,com.google.api-client_google-api-client-2.1.1.jar,commons-codec_commons-codec-1.15.jar,com.google.oauth-client_google-oauth-client-1.34.1.jar,com.google.http-client_google-http-client-apache-v2-1.42.3.jar,com.google.apis_google-api-services-storage-v1-rev20220705-2.0.0.jar,com.google.code.gson_gson-2.10.jar,com.google.cloud_google-cloud-core-2.9.0.jar,com.google.auto.value_auto-value-annotations-1.10.1.jar,com.google.cloud_google-cloud-core-http-2.9.0.jar,com.google.http-client_google-http-client-appengine-1.42.3.jar,com.google.api_gax-httpjson-0.105.1.jar,com.google.cloud_google-cloud-core-grpc-2.9.0.jar,io.grpc_grpc-core-1.51.0.jar,com.google.api_gax-2.20.1.jar,com.google.api_gax-grpc-2.20.1.jar,io.grpc_grpc-alts-1.51.0.jar,io.grpc_grpc-grpclb-1.51.0.jar,org.conscrypt_conscrypt-openjdk-uber-2.5.2.jar,io.grpc_grpc-protobuf-1.51.0.jar,com.google.auth_google-auth-library-credentials-1.13.0.jar,com.google.auth_google-auth-library-oauth2-http-1.13.0.jar,com.google.api_api-common-2.2.2.jar,javax.annotation_javax.annotation-api-1.3.2.jar,io.opencensus_opencensus-api-0.31.1.jar,io.grpc_grpc-context-1.51.0.jar,com.google.api.grpc_proto-google-iam-v1-1.6.22.jar,com.google.protobuf_protobuf-java-3.21.10.jar,com.google.protobuf_protobuf-java-util-3.21.10.jar,com.google.api.grpc_proto-google-common-protos-2.11.0.jar,org.threeten_threetenbp-1.6.4.jar,com.google.api.grpc_proto-google-cloud-storage-v2-2.16.0-alpha.jar,com.google.api.grpc_grpc-google-cloud-storage-v2-2.16.0-alpha.jar,com.google.api.grpc_gapic-google-cloud-storage-v2-2.16.0-alpha.jar,com.fasterxml.jackson.core_jackson-core-2.14.1.jar,com.google.code.findbugs_jsr305-3.0.2.jar,io.grpc_grpc-api-1.51.0.jar,io.grpc_grpc-auth-1.51.0.jar,io.grpc_grpc-stub-1.51.0.jar,org.checkerframework_checker-qual-3.28.0.jar,com.google.api.grpc_grpc-google-iam-v1-1.6.22.jar,io.grpc_grpc-protobuf-lite-1.51.0.jar,com.google.android_annotations-4.1.1.4.jar,org.codehaus.mojo_animal-sniffer-annotations-1.22.jar,io.grpc_grpc-netty-shaded-1.51.0.jar,io.perfmark_perfmark-api-0.26.0.jar,io.grpc_grpc-googleapis-1.51.0.jar,io.grpc_grpc-xds-1.51.0.jar,io.opencensus_opencensus-proto-0.2.0.jar,io.grpc_grpc-services-1.51.0.jar,com.google.re2j_re2j-1.6.jar,dk.brics.automaton_automaton-1.11-8.jar,org.slf4j_slf4j-api-1.7.16.jar'),\n", - " ('spark.repl.local.jars',\n", - " 'file:///root/.ivy2/jars/com.johnsnowlabs.nlp_spark-nlp_2.12-4.4.0.jar,file:///root/.ivy2/jars/graphframes_graphframes-0.8.2-spark3.1-s_2.12.jar,file:///root/.ivy2/jars/com.typesafe_config-1.4.2.jar,file:///root/.ivy2/jars/org.rocksdb_rocksdbjni-6.29.5.jar,file:///root/.ivy2/jars/com.amazonaws_aws-java-sdk-bundle-1.11.828.jar,file:///root/.ivy2/jars/com.github.universal-automata_liblevenshtein-3.0.0.jar,file:///root/.ivy2/jars/com.google.cloud_google-cloud-storage-2.16.0.jar,file:///root/.ivy2/jars/com.navigamez_greex-1.0.jar,file:///root/.ivy2/jars/com.johnsnowlabs.nlp_tensorflow-cpu_2.12-0.4.4.jar,file:///root/.ivy2/jars/it.unimi.dsi_fastutil-7.0.12.jar,file:///root/.ivy2/jars/org.projectlombok_lombok-1.16.8.jar,file:///root/.ivy2/jars/com.google.guava_guava-31.1-jre.jar,file:///root/.ivy2/jars/com.google.guava_failureaccess-1.0.1.jar,file:///root/.ivy2/jars/com.google.guava_listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar,file:///root/.ivy2/jars/com.google.errorprone_error_prone_annotations-2.16.jar,file:///root/.ivy2/jars/com.google.j2objc_j2objc-annotations-1.3.jar,file:///root/.ivy2/jars/com.google.http-client_google-http-client-1.42.3.jar,file:///root/.ivy2/jars/io.opencensus_opencensus-contrib-http-util-0.31.1.jar,file:///root/.ivy2/jars/com.google.http-client_google-http-client-jackson2-1.42.3.jar,file:///root/.ivy2/jars/com.google.http-client_google-http-client-gson-1.42.3.jar,file:///root/.ivy2/jars/com.google.api-client_google-api-client-2.1.1.jar,file:///root/.ivy2/jars/commons-codec_commons-codec-1.15.jar,file:///root/.ivy2/jars/com.google.oauth-client_google-oauth-client-1.34.1.jar,file:///root/.ivy2/jars/com.google.http-client_google-http-client-apache-v2-1.42.3.jar,file:///root/.ivy2/jars/com.google.apis_google-api-services-storage-v1-rev20220705-2.0.0.jar,file:///root/.ivy2/jars/com.google.code.gson_gson-2.10.jar,file:///root/.ivy2/jars/com.google.cloud_google-cloud-core-2.9.0.jar,file:///root/.ivy2/jars/com.google.auto.value_auto-value-annotations-1.10.1.jar,file:///root/.ivy2/jars/com.google.cloud_google-cloud-core-http-2.9.0.jar,file:///root/.ivy2/jars/com.google.http-client_google-http-client-appengine-1.42.3.jar,file:///root/.ivy2/jars/com.google.api_gax-httpjson-0.105.1.jar,file:///root/.ivy2/jars/com.google.cloud_google-cloud-core-grpc-2.9.0.jar,file:///root/.ivy2/jars/io.grpc_grpc-core-1.51.0.jar,file:///root/.ivy2/jars/com.google.api_gax-2.20.1.jar,file:///root/.ivy2/jars/com.google.api_gax-grpc-2.20.1.jar,file:///root/.ivy2/jars/io.grpc_grpc-alts-1.51.0.jar,file:///root/.ivy2/jars/io.grpc_grpc-grpclb-1.51.0.jar,file:///root/.ivy2/jars/org.conscrypt_conscrypt-openjdk-uber-2.5.2.jar,file:///root/.ivy2/jars/io.grpc_grpc-protobuf-1.51.0.jar,file:///root/.ivy2/jars/com.google.auth_google-auth-library-credentials-1.13.0.jar,file:///root/.ivy2/jars/com.google.auth_google-auth-library-oauth2-http-1.13.0.jar,file:///root/.ivy2/jars/com.google.api_api-common-2.2.2.jar,file:///root/.ivy2/jars/javax.annotation_javax.annotation-api-1.3.2.jar,file:///root/.ivy2/jars/io.opencensus_opencensus-api-0.31.1.jar,file:///root/.ivy2/jars/io.grpc_grpc-context-1.51.0.jar,file:///root/.ivy2/jars/com.google.api.grpc_proto-google-iam-v1-1.6.22.jar,file:///root/.ivy2/jars/com.google.protobuf_protobuf-java-3.21.10.jar,file:///root/.ivy2/jars/com.google.protobuf_protobuf-java-util-3.21.10.jar,file:///root/.ivy2/jars/com.google.api.grpc_proto-google-common-protos-2.11.0.jar,file:///root/.ivy2/jars/org.threeten_threetenbp-1.6.4.jar,file:///root/.ivy2/jars/com.google.api.grpc_proto-google-cloud-storage-v2-2.16.0-alpha.jar,file:///root/.ivy2/jars/com.google.api.grpc_grpc-google-cloud-storage-v2-2.16.0-alpha.jar,file:///root/.ivy2/jars/com.google.api.grpc_gapic-google-cloud-storage-v2-2.16.0-alpha.jar,file:///root/.ivy2/jars/com.fasterxml.jackson.core_jackson-core-2.14.1.jar,file:///root/.ivy2/jars/com.google.code.findbugs_jsr305-3.0.2.jar,file:///root/.ivy2/jars/io.grpc_grpc-api-1.51.0.jar,file:///root/.ivy2/jars/io.grpc_grpc-auth-1.51.0.jar,file:///root/.ivy2/jars/io.grpc_grpc-stub-1.51.0.jar,file:///root/.ivy2/jars/org.checkerframework_checker-qual-3.28.0.jar,file:///root/.ivy2/jars/com.google.api.grpc_grpc-google-iam-v1-1.6.22.jar,file:///root/.ivy2/jars/io.grpc_grpc-protobuf-lite-1.51.0.jar,file:///root/.ivy2/jars/com.google.android_annotations-4.1.1.4.jar,file:///root/.ivy2/jars/org.codehaus.mojo_animal-sniffer-annotations-1.22.jar,file:///root/.ivy2/jars/io.grpc_grpc-netty-shaded-1.51.0.jar,file:///root/.ivy2/jars/io.perfmark_perfmark-api-0.26.0.jar,file:///root/.ivy2/jars/io.grpc_grpc-googleapis-1.51.0.jar,file:///root/.ivy2/jars/io.grpc_grpc-xds-1.51.0.jar,file:///root/.ivy2/jars/io.opencensus_opencensus-proto-0.2.0.jar,file:///root/.ivy2/jars/io.grpc_grpc-services-1.51.0.jar,file:///root/.ivy2/jars/com.google.re2j_re2j-1.6.jar,file:///root/.ivy2/jars/dk.brics.automaton_automaton-1.11-8.jar,file:///root/.ivy2/jars/org.slf4j_slf4j-api-1.7.16.jar'),\n", - " ('spark.driver.appUIAddress',\n", - " 'http://hub-msca-bdp-dphub-students-abejburton-m.c.msca-bdp-student-ap.internal:37817'),\n", - " ('spark.driver.host',\n", - " 'hub-msca-bdp-dphub-students-abejburton-m.c.msca-bdp-student-ap.internal'),\n", - " ('spark.sql.cbo.enabled', 'true'),\n", - " ('spark.yarn.historyServer.address',\n", - " 'hub-msca-bdp-dphub-students-abejburton-m:18080'),\n", - " ('spark.executorEnv.PYTHONPATH',\n", - " '/usr/lib/spark/python/lib/py4j-0.10.9-src.zip:/usr/lib/spark/python/:{{PWD}}/pyspark.zip{{PWD}}/py4j-0.10.9-src.zip{{PWD}}/com.johnsnowlabs.nlp_spark-nlp_2.12-4.4.0.jar{{PWD}}/graphframes_graphframes-0.8.2-spark3.1-s_2.12.jar{{PWD}}/com.typesafe_config-1.4.2.jar{{PWD}}/org.rocksdb_rocksdbjni-6.29.5.jar{{PWD}}/com.amazonaws_aws-java-sdk-bundle-1.11.828.jar{{PWD}}/com.github.universal-automata_liblevenshtein-3.0.0.jar{{PWD}}/com.google.cloud_google-cloud-storage-2.16.0.jar{{PWD}}/com.navigamez_greex-1.0.jar{{PWD}}/com.johnsnowlabs.nlp_tensorflow-cpu_2.12-0.4.4.jar{{PWD}}/it.unimi.dsi_fastutil-7.0.12.jar{{PWD}}/org.projectlombok_lombok-1.16.8.jar{{PWD}}/com.google.guava_guava-31.1-jre.jar{{PWD}}/com.google.guava_failureaccess-1.0.1.jar{{PWD}}/com.google.guava_listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar{{PWD}}/com.google.errorprone_error_prone_annotations-2.16.jar{{PWD}}/com.google.j2objc_j2objc-annotations-1.3.jar{{PWD}}/com.google.http-client_google-http-client-1.42.3.jar{{PWD}}/io.opencensus_opencensus-contrib-http-util-0.31.1.jar{{PWD}}/com.google.http-client_google-http-client-jackson2-1.42.3.jar{{PWD}}/com.google.http-client_google-http-client-gson-1.42.3.jar{{PWD}}/com.google.api-client_google-api-client-2.1.1.jar{{PWD}}/commons-codec_commons-codec-1.15.jar{{PWD}}/com.google.oauth-client_google-oauth-client-1.34.1.jar{{PWD}}/com.google.http-client_google-http-client-apache-v2-1.42.3.jar{{PWD}}/com.google.apis_google-api-services-storage-v1-rev20220705-2.0.0.jar{{PWD}}/com.google.code.gson_gson-2.10.jar{{PWD}}/com.google.cloud_google-cloud-core-2.9.0.jar{{PWD}}/com.google.auto.value_auto-value-annotations-1.10.1.jar{{PWD}}/com.google.cloud_google-cloud-core-http-2.9.0.jar{{PWD}}/com.google.http-client_google-http-client-appengine-1.42.3.jar{{PWD}}/com.google.api_gax-httpjson-0.105.1.jar{{PWD}}/com.google.cloud_google-cloud-core-grpc-2.9.0.jar{{PWD}}/io.grpc_grpc-core-1.51.0.jar{{PWD}}/com.google.api_gax-2.20.1.jar{{PWD}}/com.google.api_gax-grpc-2.20.1.jar{{PWD}}/io.grpc_grpc-alts-1.51.0.jar{{PWD}}/io.grpc_grpc-grpclb-1.51.0.jar{{PWD}}/org.conscrypt_conscrypt-openjdk-uber-2.5.2.jar{{PWD}}/io.grpc_grpc-protobuf-1.51.0.jar{{PWD}}/com.google.auth_google-auth-library-credentials-1.13.0.jar{{PWD}}/com.google.auth_google-auth-library-oauth2-http-1.13.0.jar{{PWD}}/com.google.api_api-common-2.2.2.jar{{PWD}}/javax.annotation_javax.annotation-api-1.3.2.jar{{PWD}}/io.opencensus_opencensus-api-0.31.1.jar{{PWD}}/io.grpc_grpc-context-1.51.0.jar{{PWD}}/com.google.api.grpc_proto-google-iam-v1-1.6.22.jar{{PWD}}/com.google.protobuf_protobuf-java-3.21.10.jar{{PWD}}/com.google.protobuf_protobuf-java-util-3.21.10.jar{{PWD}}/com.google.api.grpc_proto-google-common-protos-2.11.0.jar{{PWD}}/org.threeten_threetenbp-1.6.4.jar{{PWD}}/com.google.api.grpc_proto-google-cloud-storage-v2-2.16.0-alpha.jar{{PWD}}/com.google.api.grpc_grpc-google-cloud-storage-v2-2.16.0-alpha.jar{{PWD}}/com.google.api.grpc_gapic-google-cloud-storage-v2-2.16.0-alpha.jar{{PWD}}/com.fasterxml.jackson.core_jackson-core-2.14.1.jar{{PWD}}/com.google.code.findbugs_jsr305-3.0.2.jar{{PWD}}/io.grpc_grpc-api-1.51.0.jar{{PWD}}/io.grpc_grpc-auth-1.51.0.jar{{PWD}}/io.grpc_grpc-stub-1.51.0.jar{{PWD}}/org.checkerframework_checker-qual-3.28.0.jar{{PWD}}/com.google.api.grpc_grpc-google-iam-v1-1.6.22.jar{{PWD}}/io.grpc_grpc-protobuf-lite-1.51.0.jar{{PWD}}/com.google.android_annotations-4.1.1.4.jar{{PWD}}/org.codehaus.mojo_animal-sniffer-annotations-1.22.jar{{PWD}}/io.grpc_grpc-netty-shaded-1.51.0.jar{{PWD}}/io.perfmark_perfmark-api-0.26.0.jar{{PWD}}/io.grpc_grpc-googleapis-1.51.0.jar{{PWD}}/io.grpc_grpc-xds-1.51.0.jar{{PWD}}/io.opencensus_opencensus-proto-0.2.0.jar{{PWD}}/io.grpc_grpc-services-1.51.0.jar{{PWD}}/com.google.re2j_re2j-1.6.jar{{PWD}}/dk.brics.automaton_automaton-1.11-8.jar{{PWD}}/org.slf4j_slf4j-api-1.7.16.jar'),\n", - " ('spark.yarn.dist.jars',\n", - " 'file:///root/.ivy2/jars/com.johnsnowlabs.nlp_spark-nlp_2.12-4.4.0.jar,file:///root/.ivy2/jars/graphframes_graphframes-0.8.2-spark3.1-s_2.12.jar,file:///root/.ivy2/jars/com.typesafe_config-1.4.2.jar,file:///root/.ivy2/jars/org.rocksdb_rocksdbjni-6.29.5.jar,file:///root/.ivy2/jars/com.amazonaws_aws-java-sdk-bundle-1.11.828.jar,file:///root/.ivy2/jars/com.github.universal-automata_liblevenshtein-3.0.0.jar,file:///root/.ivy2/jars/com.google.cloud_google-cloud-storage-2.16.0.jar,file:///root/.ivy2/jars/com.navigamez_greex-1.0.jar,file:///root/.ivy2/jars/com.johnsnowlabs.nlp_tensorflow-cpu_2.12-0.4.4.jar,file:///root/.ivy2/jars/it.unimi.dsi_fastutil-7.0.12.jar,file:///root/.ivy2/jars/org.projectlombok_lombok-1.16.8.jar,file:///root/.ivy2/jars/com.google.guava_guava-31.1-jre.jar,file:///root/.ivy2/jars/com.google.guava_failureaccess-1.0.1.jar,file:///root/.ivy2/jars/com.google.guava_listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar,file:///root/.ivy2/jars/com.google.errorprone_error_prone_annotations-2.16.jar,file:///root/.ivy2/jars/com.google.j2objc_j2objc-annotations-1.3.jar,file:///root/.ivy2/jars/com.google.http-client_google-http-client-1.42.3.jar,file:///root/.ivy2/jars/io.opencensus_opencensus-contrib-http-util-0.31.1.jar,file:///root/.ivy2/jars/com.google.http-client_google-http-client-jackson2-1.42.3.jar,file:///root/.ivy2/jars/com.google.http-client_google-http-client-gson-1.42.3.jar,file:///root/.ivy2/jars/com.google.api-client_google-api-client-2.1.1.jar,file:///root/.ivy2/jars/commons-codec_commons-codec-1.15.jar,file:///root/.ivy2/jars/com.google.oauth-client_google-oauth-client-1.34.1.jar,file:///root/.ivy2/jars/com.google.http-client_google-http-client-apache-v2-1.42.3.jar,file:///root/.ivy2/jars/com.google.apis_google-api-services-storage-v1-rev20220705-2.0.0.jar,file:///root/.ivy2/jars/com.google.code.gson_gson-2.10.jar,file:///root/.ivy2/jars/com.google.cloud_google-cloud-core-2.9.0.jar,file:///root/.ivy2/jars/com.google.auto.value_auto-value-annotations-1.10.1.jar,file:///root/.ivy2/jars/com.google.cloud_google-cloud-core-http-2.9.0.jar,file:///root/.ivy2/jars/com.google.http-client_google-http-client-appengine-1.42.3.jar,file:///root/.ivy2/jars/com.google.api_gax-httpjson-0.105.1.jar,file:///root/.ivy2/jars/com.google.cloud_google-cloud-core-grpc-2.9.0.jar,file:///root/.ivy2/jars/io.grpc_grpc-core-1.51.0.jar,file:///root/.ivy2/jars/com.google.api_gax-2.20.1.jar,file:///root/.ivy2/jars/com.google.api_gax-grpc-2.20.1.jar,file:///root/.ivy2/jars/io.grpc_grpc-alts-1.51.0.jar,file:///root/.ivy2/jars/io.grpc_grpc-grpclb-1.51.0.jar,file:///root/.ivy2/jars/org.conscrypt_conscrypt-openjdk-uber-2.5.2.jar,file:///root/.ivy2/jars/io.grpc_grpc-protobuf-1.51.0.jar,file:///root/.ivy2/jars/com.google.auth_google-auth-library-credentials-1.13.0.jar,file:///root/.ivy2/jars/com.google.auth_google-auth-library-oauth2-http-1.13.0.jar,file:///root/.ivy2/jars/com.google.api_api-common-2.2.2.jar,file:///root/.ivy2/jars/javax.annotation_javax.annotation-api-1.3.2.jar,file:///root/.ivy2/jars/io.opencensus_opencensus-api-0.31.1.jar,file:///root/.ivy2/jars/io.grpc_grpc-context-1.51.0.jar,file:///root/.ivy2/jars/com.google.api.grpc_proto-google-iam-v1-1.6.22.jar,file:///root/.ivy2/jars/com.google.protobuf_protobuf-java-3.21.10.jar,file:///root/.ivy2/jars/com.google.protobuf_protobuf-java-util-3.21.10.jar,file:///root/.ivy2/jars/com.google.api.grpc_proto-google-common-protos-2.11.0.jar,file:///root/.ivy2/jars/org.threeten_threetenbp-1.6.4.jar,file:///root/.ivy2/jars/com.google.api.grpc_proto-google-cloud-storage-v2-2.16.0-alpha.jar,file:///root/.ivy2/jars/com.google.api.grpc_grpc-google-cloud-storage-v2-2.16.0-alpha.jar,file:///root/.ivy2/jars/com.google.api.grpc_gapic-google-cloud-storage-v2-2.16.0-alpha.jar,file:///root/.ivy2/jars/com.fasterxml.jackson.core_jackson-core-2.14.1.jar,file:///root/.ivy2/jars/com.google.code.findbugs_jsr305-3.0.2.jar,file:///root/.ivy2/jars/io.grpc_grpc-api-1.51.0.jar,file:///root/.ivy2/jars/io.grpc_grpc-auth-1.51.0.jar,file:///root/.ivy2/jars/io.grpc_grpc-stub-1.51.0.jar,file:///root/.ivy2/jars/org.checkerframework_checker-qual-3.28.0.jar,file:///root/.ivy2/jars/com.google.api.grpc_grpc-google-iam-v1-1.6.22.jar,file:///root/.ivy2/jars/io.grpc_grpc-protobuf-lite-1.51.0.jar,file:///root/.ivy2/jars/com.google.android_annotations-4.1.1.4.jar,file:///root/.ivy2/jars/org.codehaus.mojo_animal-sniffer-annotations-1.22.jar,file:///root/.ivy2/jars/io.grpc_grpc-netty-shaded-1.51.0.jar,file:///root/.ivy2/jars/io.perfmark_perfmark-api-0.26.0.jar,file:///root/.ivy2/jars/io.grpc_grpc-googleapis-1.51.0.jar,file:///root/.ivy2/jars/io.grpc_grpc-xds-1.51.0.jar,file:///root/.ivy2/jars/io.opencensus_opencensus-proto-0.2.0.jar,file:///root/.ivy2/jars/io.grpc_grpc-services-1.51.0.jar,file:///root/.ivy2/jars/com.google.re2j_re2j-1.6.jar,file:///root/.ivy2/jars/dk.brics.automaton_automaton-1.11-8.jar,file:///root/.ivy2/jars/org.slf4j_slf4j-api-1.7.16.jar'),\n", - " ('spark.dataproc.sql.parquet.enableFooterCache', 'true'),\n", - " ('spark.driver.memory', '4g'),\n", - " ('spark.sql.warehouse.dir', 'file:/spark-warehouse'),\n", - " ('spark.yarn.executor.failuresValidityInterval', '1h'),\n", - " ('spark.yarn.am.memory', '640m'),\n", - " ('spark.cores.max', '4'),\n", - " ('spark.executor.cores', '4'),\n", - " ('spark.jars.packages',\n", - " 'com.johnsnowlabs.nlp:spark-nlp_2.12:4.4.0,graphframes:graphframes:0.8.2-spark3.1-s_2.12'),\n", - " ('spark.executor.instances', '2'),\n", - " ('spark.dataproc.listeners',\n", - " 'com.google.cloud.spark.performance.DataprocMetricsListener'),\n", - " ('spark.serializer.objectStreamReset', '100'),\n", - " ('spark.submit.deployMode', 'client'),\n", - " ('spark.ui.proxyBase', '/proxy/application_1699633504496_0001'),\n", - " ('spark.sql.cbo.joinReorder.enabled', 'true'),\n", - " ('spark.shuffle.service.enabled', 'true'),\n", - " ('spark.scheduler.mode', 'FAIR'),\n", - " ('spark.history.fs.logDirectory',\n", - " 'gs://dataproc-temp-us-central1-635155370842-uzamlpgc/64cc95a2-795c-4a54-be08-11a36626a92f/spark-job-history'),\n", - " ('spark.sql.adaptive.enabled', 'true'),\n", - " ('spark.yarn.jars', 'local:/usr/lib/spark/jars/*'),\n", - " ('spark.scheduler.minRegisteredResourcesRatio', '0.0'),\n", - " ('spark.app.id', 'application_1699633504496_0001'),\n", - " ('spark.master', 'yarn'),\n", - " ('spark.ui.port', '0'),\n", - " ('spark.rpc.message.maxSize', '512'),\n", - " ('spark.rdd.compress', 'True'),\n", - " ('spark.task.maxFailures', '10'),\n", - " ('spark.yarn.isPython', 'true'),\n", - " ('spark.dynamicAllocation.enabled', 'true'),\n", - " ('spark.eventLog.dir',\n", - " 'gs://dataproc-temp-us-central1-635155370842-uzamlpgc/64cc95a2-795c-4a54-be08-11a36626a92f/spark-job-history'),\n", - " ('spark.ui.showConsoleProgress', 'true')]" - ] - }, - "execution_count": 58, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "spark = SparkSession.builder.appName('2021EDA').getOrCreate()\n", - "\n", - "#change configuration settings on Spark \n", - "conf = spark.sparkContext._conf.setAll([('spark.executor.memory', '4g'), ('spark.app.name', 'Spark Updated Conf'), ('spark.executor.cores', '4'), ('spark.cores.max', '4'), ('spark.driver.memory','4g')])\n", - "\n", - "#print spark configuration settings\n", - "spark.sparkContext.getConf().getAll()" - ] - }, - { - "cell_type": "code", - "execution_count": 88, - "id": "a10a9fef-7517-4947-a7a5-b17db05dbb79", - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - " \r" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "root\n", - " |-- Trip ID: string (nullable = true)\n", - " |-- Trip Start Timestamp: string (nullable = true)\n", - " |-- Trip End Timestamp: string (nullable = true)\n", - " |-- Trip Seconds: integer (nullable = true)\n", - " |-- Trip Miles: double (nullable = true)\n", - " |-- Pickup Census Tract: long (nullable = true)\n", - " |-- Dropoff Census Tract: long (nullable = true)\n", - " |-- Pickup Community Area: integer (nullable = true)\n", - " |-- Dropoff Community Area: integer (nullable = true)\n", - " |-- Fare: double (nullable = true)\n", - " |-- Tip: integer (nullable = true)\n", - " |-- Additional Charges: double (nullable = true)\n", - " |-- Trip Total: double (nullable = true)\n", - " |-- Shared Trip Authorized: boolean (nullable = true)\n", - " |-- Trips Pooled: integer (nullable = true)\n", - " |-- Pickup Centroid Latitude: double (nullable = true)\n", - " |-- Pickup Centroid Longitude: double (nullable = true)\n", - " |-- Pickup Centroid Location: string (nullable = true)\n", - " |-- Dropoff Centroid Latitude: double (nullable = true)\n", - " |-- Dropoff Centroid Longitude: double (nullable = true)\n", - " |-- Dropoff Centroid Location: string (nullable = true)\n", - "\n", - "root\n", - " |-- name: string (nullable = true)\n", - " |-- datetime: string (nullable = true)\n", - " |-- tempmax: double (nullable = true)\n", - " |-- tempmin: double (nullable = true)\n", - " |-- temp: double (nullable = true)\n", - " |-- feelslikemax: double (nullable = true)\n", - " |-- feelslikemin: double (nullable = true)\n", - " |-- feelslike: double (nullable = true)\n", - " |-- dew: double (nullable = true)\n", - " |-- humidity: double (nullable = true)\n", - " |-- precip: double (nullable = true)\n", - " |-- precipprob: integer (nullable = true)\n", - " |-- precipcover: double (nullable = true)\n", - " |-- preciptype: string (nullable = true)\n", - " |-- snow: double (nullable = true)\n", - " |-- snowdepth: double (nullable = true)\n", - " |-- windgust: double (nullable = true)\n", - " |-- windspeed: double (nullable = true)\n", - " |-- winddir: double (nullable = true)\n", - " |-- sealevelpressure: double (nullable = true)\n", - " |-- cloudcover: double (nullable = true)\n", - " |-- visibility: double (nullable = true)\n", - " |-- solarradiation: double (nullable = true)\n", - " |-- solarenergy: double (nullable = true)\n", - " |-- uvindex: integer (nullable = true)\n", - " |-- severerisk: integer (nullable = true)\n", - " |-- sunrise: string (nullable = true)\n", - " |-- sunset: string (nullable = true)\n", - " |-- moonphase: double (nullable = true)\n", - " |-- conditions: string (nullable = true)\n", - " |-- description: string (nullable = true)\n", - " |-- icon: string (nullable = true)\n", - " |-- stations: string (nullable = true)\n", - "\n" - ] - } - ], - "source": [ - "df_2021 = spark.read.csv(\"gs://msca-bdp-student-gcs/bdp-rideshare-project/rideshare/2022\", inferSchema=True, header=True)\n", - "# figure out how to read in shp file msca-bdp-student-gcs/bdp-rideshare-project/neighborhoods/shp files\n", - "df_weather = spark.read.csv(\"gs://msca-bdp-student-gcs/bdp-rideshare-project/weather/chicago 2020-01-01 to 2022-08-31.csv\", inferSchema=True, header=True)\n", - "df_2021.printSchema()\n", - "df_weather.printSchema()" - ] - }, - { - "cell_type": "code", - "execution_count": 89, - "id": "8138c57a-26d6-44c4-b765-c7b137277044", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "135" - ] - }, - "execution_count": 89, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "#display number of records by partition\n", - "def displaypartitions(df):\n", - " #number of records by partition\n", - " num = df.rdd.getNumPartitions()\n", - " print(\"Partitions:\", num)\n", - " df.withColumn(\"partitionId\", F.spark_partition_id())\\\n", - " .groupBy(\"partitionId\")\\\n", - " .count()\\\n", - " .orderBy(F.asc(\"count\"))\\\n", - " .show(num)\n", - "\n", - "df_2021.rdd.getNumPartitions()" - ] - }, - { - "cell_type": "code", - "execution_count": 90, - "id": "e70c86dd-041c-4967-b726-c058e32a76b7", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Partitions: 135\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[Stage 321:====================================================>(134 + 1) / 135]\r" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "+-----------+------+\n", - "|partitionId| count|\n", - "+-----------+------+\n", - "| 134|337327|\n", - "| 22|499083|\n", - "| 123|504285|\n", - "| 126|504809|\n", - "| 115|504841|\n", - "| 95|505099|\n", - "| 87|505483|\n", - "| 10|505553|\n", - "| 129|505717|\n", - "| 109|505821|\n", - "| 30|506415|\n", - "| 12|506815|\n", - "| 112|506840|\n", - "| 118|506913|\n", - "| 8|507499|\n", - "| 17|507526|\n", - "| 40|507585|\n", - "| 53|507693|\n", - "| 90|507836|\n", - "| 27|507856|\n", - "| 71|508094|\n", - "| 100|508435|\n", - "| 103|508829|\n", - "| 74|508860|\n", - "| 92|509111|\n", - "| 106|509156|\n", - "| 50|509316|\n", - "| 45|509490|\n", - "| 25|509572|\n", - "| 79|509585|\n", - "| 48|509604|\n", - "| 89|509853|\n", - "| 32|510003|\n", - "| 66|510055|\n", - "| 58|510094|\n", - "| 82|510167|\n", - "| 37|510177|\n", - "| 61|510194|\n", - "| 6|510259|\n", - "| 35|510618|\n", - "| 19|510748|\n", - "| 4|510798|\n", - "| 68|510849|\n", - "| 77|510867|\n", - "| 97|511038|\n", - "| 98|511105|\n", - "| 15|511323|\n", - "| 5|511378|\n", - "| 94|511724|\n", - "| 42|512086|\n", - "| 3|512151|\n", - "| 47|512355|\n", - "| 84|512447|\n", - "| 24|512577|\n", - "| 128|512747|\n", - "| 14|512800|\n", - "| 76|512944|\n", - "| 102|513121|\n", - "| 56|513164|\n", - "| 69|513214|\n", - "| 33|513364|\n", - "| 63|513382|\n", - "| 101|513611|\n", - "| 117|513692|\n", - "| 55|513736|\n", - "| 104|513776|\n", - "| 1|513780|\n", - "| 20|513856|\n", - "| 21|513928|\n", - "| 29|513958|\n", - "| 122|514102|\n", - "| 51|514119|\n", - "| 60|514176|\n", - "| 28|514184|\n", - "| 125|514312|\n", - "| 13|514332|\n", - "| 105|514426|\n", - "| 73|514504|\n", - "| 81|514680|\n", - "| 88|514692|\n", - "| 108|514720|\n", - "| 64|514837|\n", - "| 114|514879|\n", - "| 43|514882|\n", - "| 38|514932|\n", - "| 16|514954|\n", - "| 91|514997|\n", - "| 39|515034|\n", - "| 130|515082|\n", - "| 7|515187|\n", - "| 57|515299|\n", - "| 107|515369|\n", - "| 70|515379|\n", - "| 52|515427|\n", - "| 2|515744|\n", - "| 86|515803|\n", - "| 49|516126|\n", - "| 127|516242|\n", - "| 85|516262|\n", - "| 54|516281|\n", - "| 116|516302|\n", - "| 111|516334|\n", - "| 44|516357|\n", - "| 93|516403|\n", - "| 65|516579|\n", - "| 110|516601|\n", - "| 34|516674|\n", - "| 23|516689|\n", - "| 67|516905|\n", - "| 124|516979|\n", - "| 133|517062|\n", - "| 96|517079|\n", - "| 72|517573|\n", - "| 36|517673|\n", - "| 26|517765|\n", - "| 99|517784|\n", - "| 41|517946|\n", - "| 9|518089|\n", - "| 113|518207|\n", - "| 83|518265|\n", - "| 0|518352|\n", - "| 78|518388|\n", - "| 46|518399|\n", - "| 121|518588|\n", - "| 11|518723|\n", - "| 75|518753|\n", - "| 31|518838|\n", - "| 59|518855|\n", - "| 80|518857|\n", - "| 18|519062|\n", - "| 131|519379|\n", - "| 62|519942|\n", - "| 119|521049|\n", - "| 120|521694|\n", - "| 132|527685|\n", - "+-----------+------+\n", - "\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - " \r" - ] - } - ], - "source": [ - "displaypartitions(df_2021)" - ] - }, - { - "cell_type": "code", - "execution_count": 67, - "id": "fe004162-5b22-4a11-9fad-665fa5cdecc0", - "metadata": {}, - "outputs": [], - "source": [ - "# df_2021 = df_2021.repartition(10)" - ] - }, - { - "cell_type": "code", - "execution_count": 68, - "id": "f34f9ec5-1a72-42ed-8bbe-3b54683a8bf4", - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[Stage 250:===============================================> (5 + 1) / 6]\r" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Partitions: 10\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[Stage 256:=================================================> (188 + 6) / 200]\r" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "+-----------+------+\n", - "|partitionId| count|\n", - "+-----------+------+\n", - "| 5|270864|\n", - "| 7|270865|\n", - "| 6|270865|\n", - "| 0|270865|\n", - "| 9|270866|\n", - "| 1|270866|\n", - "| 4|270866|\n", - "| 8|270866|\n", - "| 2|270866|\n", - "| 3|270867|\n", - "+-----------+------+\n", - "\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - " \r" - ] - } - ], - "source": [ - "displaypartitions(df_2021)" - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "id": "22a6039e-9848-4717-98b6-bc915540357b", - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[Stage 16:===================================================> (9 + 1) / 10]\r" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "+-------+----------------+--------------------+--------------------+-----------------+-----------------+--------------------+--------------------+---------------------+----------------------+------------------+------------------+------------------+------------------+--------------------+------------------------+-------------------------+------------------------+-------------------------+--------------------------+-------------------------+\n", - "|summary| Trip ID|Trip Start Timestamp| Trip End Timestamp| Trip Seconds| Trip Miles| Pickup Census Tract|Dropoff Census Tract|Pickup Community Area|Dropoff Community Area| Fare| Tip|Additional Charges| Trip Total| Trips Pooled|Pickup Centroid Latitude|Pickup Centroid Longitude|Pickup Centroid Location|Dropoff Centroid Latitude|Dropoff Centroid Longitude|Dropoff Centroid Location|\n", - "+-------+----------------+--------------------+--------------------+-----------------+-----------------+--------------------+--------------------+---------------------+----------------------+------------------+------------------+------------------+------------------+--------------------+------------------------+-------------------------+------------------------+-------------------------+--------------------------+-------------------------+\n", - "| count| 2708656| 2708652| 2708652| 2708652| 2708649| 983470| 975128| 2479944| 2447038| 2708100| 2708100| 2708099| 2708098| 2708651| 2482320| 2482320| 2482320| 2449465| 2449465| 2449465|\n", - "| mean| null| null| null|942.2844891111889|6.688875228942609|1.703138547767500...|1.703138094929255...| 29.80978683389625| 29.28494816999164|13.057426793692995|0.4912218898858979|3.3111284709689235|16.859785314286004| 1.0000036918746638| 41.87740670463228| -87.67185372619028| null| 41.87714315855053| -87.6694694706963| null|\n", - "| stddev| null| null| null|630.3003334457269|7.608257555036324| 339740.56288590573| 335430.99940793717| 22.278028203042062| 21.90521219841838| 9.839634058047901|1.6231638297086177| 2.236087560001195|11.125341127829076|0.001921421972618...| 0.07804151182131637| 0.06527591183128632| null| 0.07698901524173858| 0.06276134276291706| null|\n", - "| min| \"error\" : true|01/01/2021 01:00:...|01/01/2021 01:00:...| 5| 0.0| 17031010100| 17031010100| 1| 1| 0.0| 0| 0| 0.0| 1| 41.6502216756| -87.913624596| POINT (-87.530712...| 41.6502216756| -87.913624596| POINT (-87.529950...|\n", - "| max| }|01/26/2021 12:45:...|01/26/2021 12:45:...| 64707| 661.2| 17031980100| 17031980100| 77| 77| 840.0| 100| {| 845.85| 2| 42.0212235931| -87.5307124836| POINT (-87.913624...| 42.0212235931| -87.529950466| POINT (-87.913624...|\n", - "+-------+----------------+--------------------+--------------------+-----------------+-----------------+--------------------+--------------------+---------------------+----------------------+------------------+------------------+------------------+------------------+--------------------+------------------------+-------------------------+------------------------+-------------------------+--------------------------+-------------------------+\n", - "\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - " \r" - ] - } - ], - "source": [ - "df_2021.describe().show()" - ] - }, - { - "cell_type": "code", - "execution_count": 91, - "id": "c78e4618-8383-4df2-862b-4cb9dbeb20ab", - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[Stage 324:===================================================> (132 + 3) / 135]\r" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "+-------+--------------------+------------------+------------+----------+-------------------+--------------------+---------------------+----------------------+------+------+------------------+----------+----------------------+------------+------------------------+-------------------------+------------------------+-------------------------+--------------------------+-------------------------+\n", - "|Trip ID|Trip Start Timestamp|Trip End Timestamp|Trip Seconds|Trip Miles|Pickup Census Tract|Dropoff Census Tract|Pickup Community Area|Dropoff Community Area| Fare| Tip|Additional Charges|Trip Total|Shared Trip Authorized|Trips Pooled|Pickup Centroid Latitude|Pickup Centroid Longitude|Pickup Centroid Location|Dropoff Centroid Latitude|Dropoff Centroid Longitude|Dropoff Centroid Location|\n", - "+-------+--------------------+------------------+------------+----------+-------------------+--------------------+---------------------+----------------------+------+------+------------------+----------+----------------------+------------+------------------------+-------------------------+------------------------+-------------------------+--------------------------+-------------------------+\n", - "| 0| 0| 0| 2140| 525| 29231644| 29365970| 5801676| 6049435|113627|113627| 113627| 113627| 0| 0| 5605172| 5605172| 5605172| 5872849| 5872849| 5872849|\n", - "+-------+--------------------+------------------+------------+----------+-------------------+--------------------+---------------------+----------------------+------+------+------------------+----------+----------------------+------------+------------------------+-------------------------+------------------------+-------------------------+--------------------------+-------------------------+\n", - "\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - " \r" - ] - } - ], - "source": [ - "#Find the number of missing values for each column\n", - "from pyspark.sql.functions import isnan, when, count, col\n", - "df_2021.select([count(when(df_2021[c].isNull(), c)).alias(c) for c in df_2021.columns]).show()" - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "id": "2dd6ea75-5417-4d27-92bb-4d9a24808545", - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - " \r" - ] - }, - { - "data": { - "text/plain": [ - "921081" - ] - }, - "execution_count": 10, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "# number of observations with all the data in each column\n", - "df_2021.dropna(how='any').count()" - ] - }, - { - "cell_type": "code", - "execution_count": 93, - "id": "46e2e9e5-3581-444c-b149-827a5cbc62f5", - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - " \r" - ] - } - ], - "source": [ - "# Working with just data that contains full information and check for dupes\n", - "df_2021 = df_2021.dropna(how='any', subset=['Trip Start Timestamp','Trip End Timestamp','Fare','Dropoff Community Area','Pickup Community Area'])\n", - "df_2021 = df_2021.dropDuplicates()\n", - "# df_2021.count()" - ] - }, - { - "cell_type": "code", - "execution_count": 94, - "id": "6a52d857-bc07-47a7-8cc9-71478bf10e08", - "metadata": {}, - "outputs": [], - "source": [ - "# Drop columns unlikely to be useful for analysis for speed of computation and rename columns to remove spacing for ease of code writing\n", - "spark.conf.set(\"spark.sql.legacy.timeParserPolicy\", \"LEGACY\")\n", - "\n", - "df_2021 = df_2021.drop('Trips Pooled','Additional Charges','Shared Trip Authorized','Pickup Centroid Location','Dropoff Centroid Location')\n", - "df_2021 = df_2021.withColumnRenamed(\"Trip ID\",\"ID\").withColumnRenamed(\"Trip Start Timestamp\",\"start_timestamp\").withColumnRenamed(\"Trip End Timestamp\",\"end_timestamp\").withColumnRenamed(\"Trip Miles\",\\\n", - " \"miles\").withColumnRenamed(\"Pickup Census Tract\",\"pickup_tract\").withColumnRenamed(\"Dropoff Census Tract\",\"dropoff_tract\").withColumnRenamed(\"Pickup Community Area\",\"pickup_area\"\\\n", - " ).withColumnRenamed(\"Dropoff Community Area\",\"dropoff_area\").withColumnRenamed(\"Trip Total\",\"total\").withColumnRenamed(\"Pickup Centroid Latitude\",\"pickup_lat\").withColumnRenamed(\\\n", - " \"Pickup Centroid Longitude\",\"pickup_lon\").withColumnRenamed(\"Pickup Centroid Location\",\"pickup_location\").withColumnRenamed(\"Dropoff Centroid Latitude\",\"dropoff_lat\").withColumnRenamed(\\\n", - " \"Dropoff Centroid Longitude\",\"dropoff_lon\").withColumnRenamed(\"Dropoff Centroid Location\",\"dropoff_location\")\n", - "# fix datatypes\n", - "df_2021 = df_2021.withColumn('start_timestamp', F.to_timestamp(df_2021['start_timestamp'], 'MM/dd/yyyy hh:mm:ss a')).withColumn('end_timestamp', F.to_timestamp(df_2021['end_timestamp'], 'MM/dd/yyyy hh:mm:ss a'))\n", - "df_weather = df_weather.withColumn('datetime',F.to_date(df_weather['datetime'], \"yyyy-MM-dd\"))\n" - ] - }, - { - "cell_type": "code", - "execution_count": 101, - "id": "17ebe569-82bb-49b0-aaaf-ac5062bede35", - "metadata": {}, - "outputs": [], - "source": [ - "# add the month column\n", - "df_2021 = df_2021.withColumn('month', F.month(df_2021.start_timestamp))\n", - "df_2021 = df_2021.withColumn('hour', F.hour(df_2021.start_timestamp))" - ] - }, - { - "cell_type": "code", - "execution_count": 96, - "id": "2ae6d6b2-9001-4ded-ba3a-225861cbe451", - "metadata": {}, - "outputs": [], - "source": [ - "# get rides that occurred within hyde park\n", - "# add kenwood and woodlawn to this list - only if the other location is hyde park \n", - "df_hp = df_2021.filter((df_2021.pickup_area == 41) & (df_2021.dropoff_area == 41))\n", - "df_kw = df_2021.filter(((df_2021.pickup_area == 41) & (df_2021.dropoff_area == 42)) | ((df_2021.pickup_area == 42) & (df_2021.dropoff_area == 41)))\n", - "df_wl = df_2021.filter(((df_2021.pickup_area == 41) & (df_2021.dropoff_area == 39)) | ((df_2021.pickup_area == 39) & (df_2021.dropoff_area == 41)))\n", - "df_area = df_hp.union(df_kw).union(df_wl)" - ] - }, - { - "cell_type": "code", - "execution_count": 97, - "id": "67a9c9c1-dd4e-41b6-9d29-b475a1189268", - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[Stage 339:> (0 + 1) / 1]35]\r" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "+--------------------+-------------------+-------------------+------------+-----+------------+-------------+-----------+------------+----+---+-----------------+-------------+--------------+--------------------+-------------+--------------+--------------------+-----+\n", - "| ID| start_timestamp| end_timestamp|Trip Seconds|miles|pickup_tract|dropoff_tract|pickup_area|dropoff_area|Fare|Tip| total| pickup_lat| pickup_lon| pickup_location| dropoff_lat| dropoff_lon| dropoff_location|month|\n", - "+--------------------+-------------------+-------------------+------------+-----+------------+-------------+-----------+------------+----+---+-----------------+-------------+--------------+--------------------+-------------+--------------+--------------------+-----+\n", - "|c958c47a865cd140f...|2022-01-05 13:15:00|2022-01-05 13:15:00| 311| 0.9| null| null| 41| 41| 7.5| 0| 8.52| 41.794090253| -87.592310855|POINT (-87.592310...| 41.794090253| -87.592310855|POINT (-87.592310...| 1|\n", - "|2dc3081bcb17fcdfa...|2022-01-05 18:15:00|2022-01-05 18:15:00| 160| 0.6| null| null| 41| 41| 5.0| 0| 6.02| 41.794090253| -87.592310855|POINT (-87.592310...| 41.794090253| -87.592310855|POINT (-87.592310...| 1|\n", - "|be3cb691f48c0f939...|2022-01-05 19:45:00|2022-01-05 19:45:00| 237| 1.2| 17031410800| 17031410500| 41| 41| 7.5| 0| 8.52|41.7979652088|-87.5896070309|POINT (-87.589607...|41.7978270187|-87.6037457654|POINT (-87.603745...| 1|\n", - "|9d757b875335e7a68...|2022-01-05 21:45:00|2022-01-05 21:45:00| 225| 1.3| null| null| 41| 41| 5.0| 0|7.359999999999999| 41.794090253| -87.592310855|POINT (-87.592310...| 41.794090253| -87.592310855|POINT (-87.592310...| 1|\n", - "|6884006612e9514b9...|2022-01-06 11:00:00|2022-01-06 11:00:00| 288| 1.2| null| null| 41| 41| 5.0| 0| 7.46| 41.794090253| -87.592310855|POINT (-87.592310...| 41.794090253| -87.592310855|POINT (-87.592310...| 1|\n", - "+--------------------+-------------------+-------------------+------------+-----+------------+-------------+-----------+------------+----+---+-----------------+-------------+--------------+--------------------+-------------+--------------+--------------------+-----+\n", - "only showing top 5 rows\n", - "\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - " \r" - ] - } - ], - "source": [ - "df_area.show(5)" - ] - }, - { - "cell_type": "code", - "execution_count": 98, - "id": "2c54ef92-e61e-4827-ad6c-bb8b9405e701", - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - " 35]\r" - ] - }, - { - "data": { - "text/plain": [ - "" - ] - }, - "execution_count": 98, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "image/png": "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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "df_area.groupby(\"month\").agg({'ID':'count'}).orderBy(F.col('month').asc()).toPandas().plot(x=\"month\",y=\"count(ID)\")" - ] - }, - { - "cell_type": "markdown", - "id": "8e9f1724-7b0f-4a80-8a3d-aa101a7fbe19", - "metadata": {}, - "source": [ - "The code after this point is what remains to be done and is untested. If we all finish the things written below we should be done with the EDA" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "f1638b38-1606-428c-aac8-5f48bc36a3d2", - "metadata": {}, - "outputs": [], - "source": [ - "# verify this is the correct time period for your given year\n", - "df_area_program = df_area.filter((df_area.Fare <= 15.0) & (df_area.hour >= 17) & (df_area.hour < 4))\n", - "# do the same kind of monthly plot here" - ] - }, - { - "cell_type": "code", - "execution_count": 99, - "id": "a1b60972-6242-4259-8209-87d9fe9e750f", - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[Stage 369:=================================================> (19 + 2) / 21]\r" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "+-------------------------+\n", - "|approx_count_distinct(ID)|\n", - "+-------------------------+\n", - "| 858074|\n", - "+-------------------------+\n", - "\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - " \r" - ] - } - ], - "source": [ - "from pyspark.sql.functions import approxCountDistinct\n", - "\n", - "df_area.select(approxCountDistinct(\"ID\", rsd = 0.05)).show()" - ] - }, - { - "cell_type": "code", - "execution_count": 79, - "id": "2fda94cd-990c-436b-93b0-979f7e3c8ad3", - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[Stage 283:========================================> (5 + 2) / 7]\r" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "+-----+\n", - "|month|\n", - "+-----+\n", - "| 1|\n", - "+-----+\n", - "\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - " \r" - ] - } - ], - "source": [ - "# basic plots for all rides (not just in the program area)\n", - "df_2021.groupby(\"month\").agg({'ID':'count'}).orderBy(F.col('month').asc()).toPandas().plot(x=\"month\",y=\"count(ID)\")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "90914451-ac49-44f6-98d5-4eb6b5f8dbf6", - "metadata": {}, - "outputs": [], - "source": [ - "df_2021.groupby(\"pickup_area\").agg({'ID':'count'}).orderBy(F.col('pickup_area').asc()).toPandas().plot(x=\"pickup_area\",y=\"count(ID)\")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "5758417d-edcd-448a-9535-16f5b9c1528a", - "metadata": {}, - "outputs": [], - "source": [ - "df_2021.groupby(\"dropoff_area\").agg({'ID':'count'}).orderBy(F.col('dropoff_area').asc()).toPandas().plot(x=\"pickup_area\",y=\"count(ID)\")" - ] - }, - { - "cell_type": "markdown", - "id": "8cd74633-8919-4376-8b5f-a512aa3ee28a", - "metadata": {}, - "source": [ - "# Next Steps\n", - "Filter the in-area dataframe to only include rides with a fare under 15, and rides within the timeframe for the given year.\n", - "\n", - "plot rides by hour\n", - "\n", - "\n", - "## we still don't know how to do these, if you figure it out pls share\n", - "the geospatial ipynb (notebook 4.8) from ashish shows some ways to work with this kind of data in pyspark\n", - "\n", - "Plot Cloropleths (for all of chicago)\n", - "\n", - "heat map of dropoff location and pickup location (for in-program rides)\n", - "\n", - "for 2021 - think about how to show the september to october switch - vline when program starts\n", - "\n", - "add vertical lines at and key shifts in the program policy" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "PySpark", - "language": "python", - "name": "pyspark" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.8.15" - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} diff --git a/geospatial.ipynb b/geospatial.ipynb index f233986..e976848 100644 --- a/geospatial.ipynb +++ b/geospatial.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "code", - "execution_count": 4, + "execution_count": 3, "id": "8d4c7418-8481-427c-8097-6e7dae4058d4", "metadata": {}, "outputs": [], @@ -17,39 +17,31 @@ { "cell_type": "code", "execution_count": 5, - "id": "5c6c7fb1-4103-477c-8795-48f88574bc62", - "metadata": {}, - "outputs": [], - "source": [ - "from google.cloud import bigquery\n" - ] - }, - { - "cell_type": "code", - "execution_count": 6, "id": "45e18c18-0f0e-4b72-8f39-5ba877cac4ba", "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "[('spark.app.id', 'application_1700243096505_0007'),\n", - " ('spark.stage.maxConsecutiveAttempts', '10'),\n", + "[('spark.stage.maxConsecutiveAttempts', '10'),\n", " ('spark.dynamicAllocation.minExecutors', '1'),\n", - " ('spark.eventLog.enabled', 'true'),\n", + " ('spark.app.name', 'geospatial'),\n", " ('spark.submit.pyFiles',\n", " '/root/.ivy2/jars/com.johnsnowlabs.nlp_spark-nlp_2.12-4.4.0.jar,/root/.ivy2/jars/graphframes_graphframes-0.8.2-spark3.1-s_2.12.jar,/root/.ivy2/jars/com.typesafe_config-1.4.2.jar,/root/.ivy2/jars/org.rocksdb_rocksdbjni-6.29.5.jar,/root/.ivy2/jars/com.amazonaws_aws-java-sdk-bundle-1.11.828.jar,/root/.ivy2/jars/com.github.universal-automata_liblevenshtein-3.0.0.jar,/root/.ivy2/jars/com.google.cloud_google-cloud-storage-2.16.0.jar,/root/.ivy2/jars/com.navigamez_greex-1.0.jar,/root/.ivy2/jars/com.johnsnowlabs.nlp_tensorflow-cpu_2.12-0.4.4.jar,/root/.ivy2/jars/it.unimi.dsi_fastutil-7.0.12.jar,/root/.ivy2/jars/org.projectlombok_lombok-1.16.8.jar,/root/.ivy2/jars/com.google.guava_guava-31.1-jre.jar,/root/.ivy2/jars/com.google.guava_failureaccess-1.0.1.jar,/root/.ivy2/jars/com.google.guava_listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar,/root/.ivy2/jars/com.google.errorprone_error_prone_annotations-2.16.jar,/root/.ivy2/jars/com.google.j2objc_j2objc-annotations-1.3.jar,/root/.ivy2/jars/com.google.http-client_google-http-client-1.42.3.jar,/root/.ivy2/jars/io.opencensus_opencensus-contrib-http-util-0.31.1.jar,/root/.ivy2/jars/com.google.http-client_google-http-client-jackson2-1.42.3.jar,/root/.ivy2/jars/com.google.http-client_google-http-client-gson-1.42.3.jar,/root/.ivy2/jars/com.google.api-client_google-api-client-2.1.1.jar,/root/.ivy2/jars/commons-codec_commons-codec-1.15.jar,/root/.ivy2/jars/com.google.oauth-client_google-oauth-client-1.34.1.jar,/root/.ivy2/jars/com.google.http-client_google-http-client-apache-v2-1.42.3.jar,/root/.ivy2/jars/com.google.apis_google-api-services-storage-v1-rev20220705-2.0.0.jar,/root/.ivy2/jars/com.google.code.gson_gson-2.10.jar,/root/.ivy2/jars/com.google.cloud_google-cloud-core-2.9.0.jar,/root/.ivy2/jars/com.google.auto.value_auto-value-annotations-1.10.1.jar,/root/.ivy2/jars/com.google.cloud_google-cloud-core-http-2.9.0.jar,/root/.ivy2/jars/com.google.http-client_google-http-client-appengine-1.42.3.jar,/root/.ivy2/jars/com.google.api_gax-httpjson-0.105.1.jar,/root/.ivy2/jars/com.google.cloud_google-cloud-core-grpc-2.9.0.jar,/root/.ivy2/jars/io.grpc_grpc-core-1.51.0.jar,/root/.ivy2/jars/com.google.api_gax-2.20.1.jar,/root/.ivy2/jars/com.google.api_gax-grpc-2.20.1.jar,/root/.ivy2/jars/io.grpc_grpc-alts-1.51.0.jar,/root/.ivy2/jars/io.grpc_grpc-grpclb-1.51.0.jar,/root/.ivy2/jars/org.conscrypt_conscrypt-openjdk-uber-2.5.2.jar,/root/.ivy2/jars/io.grpc_grpc-protobuf-1.51.0.jar,/root/.ivy2/jars/com.google.auth_google-auth-library-credentials-1.13.0.jar,/root/.ivy2/jars/com.google.auth_google-auth-library-oauth2-http-1.13.0.jar,/root/.ivy2/jars/com.google.api_api-common-2.2.2.jar,/root/.ivy2/jars/javax.annotation_javax.annotation-api-1.3.2.jar,/root/.ivy2/jars/io.opencensus_opencensus-api-0.31.1.jar,/root/.ivy2/jars/io.grpc_grpc-context-1.51.0.jar,/root/.ivy2/jars/com.google.api.grpc_proto-google-iam-v1-1.6.22.jar,/root/.ivy2/jars/com.google.protobuf_protobuf-java-3.21.10.jar,/root/.ivy2/jars/com.google.protobuf_protobuf-java-util-3.21.10.jar,/root/.ivy2/jars/com.google.api.grpc_proto-google-common-protos-2.11.0.jar,/root/.ivy2/jars/org.threeten_threetenbp-1.6.4.jar,/root/.ivy2/jars/com.google.api.grpc_proto-google-cloud-storage-v2-2.16.0-alpha.jar,/root/.ivy2/jars/com.google.api.grpc_grpc-google-cloud-storage-v2-2.16.0-alpha.jar,/root/.ivy2/jars/com.google.api.grpc_gapic-google-cloud-storage-v2-2.16.0-alpha.jar,/root/.ivy2/jars/com.fasterxml.jackson.core_jackson-core-2.14.1.jar,/root/.ivy2/jars/com.google.code.findbugs_jsr305-3.0.2.jar,/root/.ivy2/jars/io.grpc_grpc-api-1.51.0.jar,/root/.ivy2/jars/io.grpc_grpc-auth-1.51.0.jar,/root/.ivy2/jars/io.grpc_grpc-stub-1.51.0.jar,/root/.ivy2/jars/org.checkerframework_checker-qual-3.28.0.jar,/root/.ivy2/jars/com.google.api.grpc_grpc-google-iam-v1-1.6.22.jar,/root/.ivy2/jars/io.grpc_grpc-protobuf-lite-1.51.0.jar,/root/.ivy2/jars/com.google.android_annotations-4.1.1.4.jar,/root/.ivy2/jars/org.codehaus.mojo_animal-sniffer-annotations-1.22.jar,/root/.ivy2/jars/io.grpc_grpc-netty-shaded-1.51.0.jar,/root/.ivy2/jars/io.perfmark_perfmark-api-0.26.0.jar,/root/.ivy2/jars/io.grpc_grpc-googleapis-1.51.0.jar,/root/.ivy2/jars/io.grpc_grpc-xds-1.51.0.jar,/root/.ivy2/jars/io.opencensus_opencensus-proto-0.2.0.jar,/root/.ivy2/jars/io.grpc_grpc-services-1.51.0.jar,/root/.ivy2/jars/com.google.re2j_re2j-1.6.jar,/root/.ivy2/jars/dk.brics.automaton_automaton-1.11-8.jar,/root/.ivy2/jars/org.slf4j_slf4j-api-1.7.16.jar'),\n", + " ('spark.eventLog.enabled', 'true'),\n", " ('spark.dataproc.sql.joinConditionReorder.enabled', 'true'),\n", - " ('spark.executor.memory', '5739m'),\n", + " ('spark.sql.autoBroadcastJoinThreshold', '191m'),\n", " ('spark.kryoserializer.buffer.max', '2000M'),\n", " ('spark.serializer', 'org.apache.spark.serializer.KryoSerializer'),\n", + " ('spark.driver.memory', '15360m'),\n", " ('spark.dataproc.sql.local.rank.pushdown.enabled', 'true'),\n", - " ('spark.driver.maxResultSize', '0'),\n", + " ('spark.executor.memory', '25564m'),\n", + " ('spark.eventLog.dir',\n", + " 'gs://dataproc-temp-us-central1-635155370842-uzamlpgc/40615aee-663d-485d-b4dc-946c4fc9e9bc/spark-job-history'),\n", + " ('spark.org.apache.hadoop.yarn.server.webproxy.amfilter.AmIpFilter.param.PROXY_URI_BASES',\n", + " 'http://hub-msca-bdp-dphub-students-test-ridhi-m:8088/proxy/application_1701272855530_0009'),\n", " ('spark.yarn.unmanagedAM.enabled', 'true'),\n", - " ('spark.ui.proxyBase', '/proxy/application_1700243096505_0007'),\n", - " ('spark.sql.autoBroadcastJoinThreshold', '43m'),\n", - " ('spark.history.fs.logDirectory',\n", - " 'gs://dataproc-temp-us-central1-635155370842-uzamlpgc/479dade3-720d-4118-bb28-da417fb33080/spark-job-history'),\n", + " ('spark.driver.maxResultSize', '0'),\n", " ('spark.ui.filters',\n", " 'org.apache.hadoop.yarn.server.webproxy.amfilter.AmIpFilter'),\n", " ('spark.metrics.namespace',\n", @@ -63,33 +55,30 @@ " ('spark.driver.host',\n", " 'hub-msca-bdp-dphub-students-test-ridhi-m.c.msca-bdp-student-ap.internal'),\n", " ('spark.executor.id', 'driver'),\n", - " ('spark.org.apache.hadoop.yarn.server.webproxy.amfilter.AmIpFilter.param.PROXY_URI_BASES',\n", - " 'http://hub-msca-bdp-dphub-students-test-ridhi-m:8088/proxy/application_1700243096505_0007'),\n", " ('spark.hadoop.mapreduce.fileoutputcommitter.algorithm.version', '2'),\n", " ('spark.dynamicAllocation.maxExecutors', '10000'),\n", " ('spark.yarn.dist.pyFiles',\n", " 'file:///root/.ivy2/jars/com.johnsnowlabs.nlp_spark-nlp_2.12-4.4.0.jar,file:///root/.ivy2/jars/graphframes_graphframes-0.8.2-spark3.1-s_2.12.jar,file:///root/.ivy2/jars/com.typesafe_config-1.4.2.jar,file:///root/.ivy2/jars/org.rocksdb_rocksdbjni-6.29.5.jar,file:///root/.ivy2/jars/com.amazonaws_aws-java-sdk-bundle-1.11.828.jar,file:///root/.ivy2/jars/com.github.universal-automata_liblevenshtein-3.0.0.jar,file:///root/.ivy2/jars/com.google.cloud_google-cloud-storage-2.16.0.jar,file:///root/.ivy2/jars/com.navigamez_greex-1.0.jar,file:///root/.ivy2/jars/com.johnsnowlabs.nlp_tensorflow-cpu_2.12-0.4.4.jar,file:///root/.ivy2/jars/it.unimi.dsi_fastutil-7.0.12.jar,file:///root/.ivy2/jars/org.projectlombok_lombok-1.16.8.jar,file:///root/.ivy2/jars/com.google.guava_guava-31.1-jre.jar,file:///root/.ivy2/jars/com.google.guava_failureaccess-1.0.1.jar,file:///root/.ivy2/jars/com.google.guava_listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar,file:///root/.ivy2/jars/com.google.errorprone_error_prone_annotations-2.16.jar,file:///root/.ivy2/jars/com.google.j2objc_j2objc-annotations-1.3.jar,file:///root/.ivy2/jars/com.google.http-client_google-http-client-1.42.3.jar,file:///root/.ivy2/jars/io.opencensus_opencensus-contrib-http-util-0.31.1.jar,file:///root/.ivy2/jars/com.google.http-client_google-http-client-jackson2-1.42.3.jar,file:///root/.ivy2/jars/com.google.http-client_google-http-client-gson-1.42.3.jar,file:///root/.ivy2/jars/com.google.api-client_google-api-client-2.1.1.jar,file:///root/.ivy2/jars/commons-codec_commons-codec-1.15.jar,file:///root/.ivy2/jars/com.google.oauth-client_google-oauth-client-1.34.1.jar,file:///root/.ivy2/jars/com.google.http-client_google-http-client-apache-v2-1.42.3.jar,file:///root/.ivy2/jars/com.google.apis_google-api-services-storage-v1-rev20220705-2.0.0.jar,file:///root/.ivy2/jars/com.google.code.gson_gson-2.10.jar,file:///root/.ivy2/jars/com.google.cloud_google-cloud-core-2.9.0.jar,file:///root/.ivy2/jars/com.google.auto.value_auto-value-annotations-1.10.1.jar,file:///root/.ivy2/jars/com.google.cloud_google-cloud-core-http-2.9.0.jar,file:///root/.ivy2/jars/com.google.http-client_google-http-client-appengine-1.42.3.jar,file:///root/.ivy2/jars/com.google.api_gax-httpjson-0.105.1.jar,file:///root/.ivy2/jars/com.google.cloud_google-cloud-core-grpc-2.9.0.jar,file:///root/.ivy2/jars/io.grpc_grpc-core-1.51.0.jar,file:///root/.ivy2/jars/com.google.api_gax-2.20.1.jar,file:///root/.ivy2/jars/com.google.api_gax-grpc-2.20.1.jar,file:///root/.ivy2/jars/io.grpc_grpc-alts-1.51.0.jar,file:///root/.ivy2/jars/io.grpc_grpc-grpclb-1.51.0.jar,file:///root/.ivy2/jars/org.conscrypt_conscrypt-openjdk-uber-2.5.2.jar,file:///root/.ivy2/jars/io.grpc_grpc-protobuf-1.51.0.jar,file:///root/.ivy2/jars/com.google.auth_google-auth-library-credentials-1.13.0.jar,file:///root/.ivy2/jars/com.google.auth_google-auth-library-oauth2-http-1.13.0.jar,file:///root/.ivy2/jars/com.google.api_api-common-2.2.2.jar,file:///root/.ivy2/jars/javax.annotation_javax.annotation-api-1.3.2.jar,file:///root/.ivy2/jars/io.opencensus_opencensus-api-0.31.1.jar,file:///root/.ivy2/jars/io.grpc_grpc-context-1.51.0.jar,file:///root/.ivy2/jars/com.google.api.grpc_proto-google-iam-v1-1.6.22.jar,file:///root/.ivy2/jars/com.google.protobuf_protobuf-java-3.21.10.jar,file:///root/.ivy2/jars/com.google.protobuf_protobuf-java-util-3.21.10.jar,file:///root/.ivy2/jars/com.google.api.grpc_proto-google-common-protos-2.11.0.jar,file:///root/.ivy2/jars/org.threeten_threetenbp-1.6.4.jar,file:///root/.ivy2/jars/com.google.api.grpc_proto-google-cloud-storage-v2-2.16.0-alpha.jar,file:///root/.ivy2/jars/com.google.api.grpc_grpc-google-cloud-storage-v2-2.16.0-alpha.jar,file:///root/.ivy2/jars/com.google.api.grpc_gapic-google-cloud-storage-v2-2.16.0-alpha.jar,file:///root/.ivy2/jars/com.fasterxml.jackson.core_jackson-core-2.14.1.jar,file:///root/.ivy2/jars/com.google.code.findbugs_jsr305-3.0.2.jar,file:///root/.ivy2/jars/io.grpc_grpc-api-1.51.0.jar,file:///root/.ivy2/jars/io.grpc_grpc-auth-1.51.0.jar,file:///root/.ivy2/jars/io.grpc_grpc-stub-1.51.0.jar,file:///root/.ivy2/jars/org.checkerframework_checker-qual-3.28.0.jar,file:///root/.ivy2/jars/com.google.api.grpc_grpc-google-iam-v1-1.6.22.jar,file:///root/.ivy2/jars/io.grpc_grpc-protobuf-lite-1.51.0.jar,file:///root/.ivy2/jars/com.google.android_annotations-4.1.1.4.jar,file:///root/.ivy2/jars/org.codehaus.mojo_animal-sniffer-annotations-1.22.jar,file:///root/.ivy2/jars/io.grpc_grpc-netty-shaded-1.51.0.jar,file:///root/.ivy2/jars/io.perfmark_perfmark-api-0.26.0.jar,file:///root/.ivy2/jars/io.grpc_grpc-googleapis-1.51.0.jar,file:///root/.ivy2/jars/io.grpc_grpc-xds-1.51.0.jar,file:///root/.ivy2/jars/io.opencensus_opencensus-proto-0.2.0.jar,file:///root/.ivy2/jars/io.grpc_grpc-services-1.51.0.jar,file:///root/.ivy2/jars/com.google.re2j_re2j-1.6.jar,file:///root/.ivy2/jars/dk.brics.automaton_automaton-1.11-8.jar,file:///root/.ivy2/jars/org.slf4j_slf4j-api-1.7.16.jar'),\n", " ('spark.yarn.am.attemptFailuresValidityInterval', '1h'),\n", " ('spark.sql.catalogImplementation', 'hive'),\n", - " ('spark.driver.port', '35211'),\n", " ('spark.executorEnv.OPENBLAS_NUM_THREADS', '1'),\n", " ('spark.yarn.secondary.jars',\n", " 'com.johnsnowlabs.nlp_spark-nlp_2.12-4.4.0.jar,graphframes_graphframes-0.8.2-spark3.1-s_2.12.jar,com.typesafe_config-1.4.2.jar,org.rocksdb_rocksdbjni-6.29.5.jar,com.amazonaws_aws-java-sdk-bundle-1.11.828.jar,com.github.universal-automata_liblevenshtein-3.0.0.jar,com.google.cloud_google-cloud-storage-2.16.0.jar,com.navigamez_greex-1.0.jar,com.johnsnowlabs.nlp_tensorflow-cpu_2.12-0.4.4.jar,it.unimi.dsi_fastutil-7.0.12.jar,org.projectlombok_lombok-1.16.8.jar,com.google.guava_guava-31.1-jre.jar,com.google.guava_failureaccess-1.0.1.jar,com.google.guava_listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar,com.google.errorprone_error_prone_annotations-2.16.jar,com.google.j2objc_j2objc-annotations-1.3.jar,com.google.http-client_google-http-client-1.42.3.jar,io.opencensus_opencensus-contrib-http-util-0.31.1.jar,com.google.http-client_google-http-client-jackson2-1.42.3.jar,com.google.http-client_google-http-client-gson-1.42.3.jar,com.google.api-client_google-api-client-2.1.1.jar,commons-codec_commons-codec-1.15.jar,com.google.oauth-client_google-oauth-client-1.34.1.jar,com.google.http-client_google-http-client-apache-v2-1.42.3.jar,com.google.apis_google-api-services-storage-v1-rev20220705-2.0.0.jar,com.google.code.gson_gson-2.10.jar,com.google.cloud_google-cloud-core-2.9.0.jar,com.google.auto.value_auto-value-annotations-1.10.1.jar,com.google.cloud_google-cloud-core-http-2.9.0.jar,com.google.http-client_google-http-client-appengine-1.42.3.jar,com.google.api_gax-httpjson-0.105.1.jar,com.google.cloud_google-cloud-core-grpc-2.9.0.jar,io.grpc_grpc-core-1.51.0.jar,com.google.api_gax-2.20.1.jar,com.google.api_gax-grpc-2.20.1.jar,io.grpc_grpc-alts-1.51.0.jar,io.grpc_grpc-grpclb-1.51.0.jar,org.conscrypt_conscrypt-openjdk-uber-2.5.2.jar,io.grpc_grpc-protobuf-1.51.0.jar,com.google.auth_google-auth-library-credentials-1.13.0.jar,com.google.auth_google-auth-library-oauth2-http-1.13.0.jar,com.google.api_api-common-2.2.2.jar,javax.annotation_javax.annotation-api-1.3.2.jar,io.opencensus_opencensus-api-0.31.1.jar,io.grpc_grpc-context-1.51.0.jar,com.google.api.grpc_proto-google-iam-v1-1.6.22.jar,com.google.protobuf_protobuf-java-3.21.10.jar,com.google.protobuf_protobuf-java-util-3.21.10.jar,com.google.api.grpc_proto-google-common-protos-2.11.0.jar,org.threeten_threetenbp-1.6.4.jar,com.google.api.grpc_proto-google-cloud-storage-v2-2.16.0-alpha.jar,com.google.api.grpc_grpc-google-cloud-storage-v2-2.16.0-alpha.jar,com.google.api.grpc_gapic-google-cloud-storage-v2-2.16.0-alpha.jar,com.fasterxml.jackson.core_jackson-core-2.14.1.jar,com.google.code.findbugs_jsr305-3.0.2.jar,io.grpc_grpc-api-1.51.0.jar,io.grpc_grpc-auth-1.51.0.jar,io.grpc_grpc-stub-1.51.0.jar,org.checkerframework_checker-qual-3.28.0.jar,com.google.api.grpc_grpc-google-iam-v1-1.6.22.jar,io.grpc_grpc-protobuf-lite-1.51.0.jar,com.google.android_annotations-4.1.1.4.jar,org.codehaus.mojo_animal-sniffer-annotations-1.22.jar,io.grpc_grpc-netty-shaded-1.51.0.jar,io.perfmark_perfmark-api-0.26.0.jar,io.grpc_grpc-googleapis-1.51.0.jar,io.grpc_grpc-xds-1.51.0.jar,io.opencensus_opencensus-proto-0.2.0.jar,io.grpc_grpc-services-1.51.0.jar,com.google.re2j_re2j-1.6.jar,dk.brics.automaton_automaton-1.11-8.jar,org.slf4j_slf4j-api-1.7.16.jar'),\n", " ('spark.repl.local.jars',\n", " 'file:///root/.ivy2/jars/com.johnsnowlabs.nlp_spark-nlp_2.12-4.4.0.jar,file:///root/.ivy2/jars/graphframes_graphframes-0.8.2-spark3.1-s_2.12.jar,file:///root/.ivy2/jars/com.typesafe_config-1.4.2.jar,file:///root/.ivy2/jars/org.rocksdb_rocksdbjni-6.29.5.jar,file:///root/.ivy2/jars/com.amazonaws_aws-java-sdk-bundle-1.11.828.jar,file:///root/.ivy2/jars/com.github.universal-automata_liblevenshtein-3.0.0.jar,file:///root/.ivy2/jars/com.google.cloud_google-cloud-storage-2.16.0.jar,file:///root/.ivy2/jars/com.navigamez_greex-1.0.jar,file:///root/.ivy2/jars/com.johnsnowlabs.nlp_tensorflow-cpu_2.12-0.4.4.jar,file:///root/.ivy2/jars/it.unimi.dsi_fastutil-7.0.12.jar,file:///root/.ivy2/jars/org.projectlombok_lombok-1.16.8.jar,file:///root/.ivy2/jars/com.google.guava_guava-31.1-jre.jar,file:///root/.ivy2/jars/com.google.guava_failureaccess-1.0.1.jar,file:///root/.ivy2/jars/com.google.guava_listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar,file:///root/.ivy2/jars/com.google.errorprone_error_prone_annotations-2.16.jar,file:///root/.ivy2/jars/com.google.j2objc_j2objc-annotations-1.3.jar,file:///root/.ivy2/jars/com.google.http-client_google-http-client-1.42.3.jar,file:///root/.ivy2/jars/io.opencensus_opencensus-contrib-http-util-0.31.1.jar,file:///root/.ivy2/jars/com.google.http-client_google-http-client-jackson2-1.42.3.jar,file:///root/.ivy2/jars/com.google.http-client_google-http-client-gson-1.42.3.jar,file:///root/.ivy2/jars/com.google.api-client_google-api-client-2.1.1.jar,file:///root/.ivy2/jars/commons-codec_commons-codec-1.15.jar,file:///root/.ivy2/jars/com.google.oauth-client_google-oauth-client-1.34.1.jar,file:///root/.ivy2/jars/com.google.http-client_google-http-client-apache-v2-1.42.3.jar,file:///root/.ivy2/jars/com.google.apis_google-api-services-storage-v1-rev20220705-2.0.0.jar,file:///root/.ivy2/jars/com.google.code.gson_gson-2.10.jar,file:///root/.ivy2/jars/com.google.cloud_google-cloud-core-2.9.0.jar,file:///root/.ivy2/jars/com.google.auto.value_auto-value-annotations-1.10.1.jar,file:///root/.ivy2/jars/com.google.cloud_google-cloud-core-http-2.9.0.jar,file:///root/.ivy2/jars/com.google.http-client_google-http-client-appengine-1.42.3.jar,file:///root/.ivy2/jars/com.google.api_gax-httpjson-0.105.1.jar,file:///root/.ivy2/jars/com.google.cloud_google-cloud-core-grpc-2.9.0.jar,file:///root/.ivy2/jars/io.grpc_grpc-core-1.51.0.jar,file:///root/.ivy2/jars/com.google.api_gax-2.20.1.jar,file:///root/.ivy2/jars/com.google.api_gax-grpc-2.20.1.jar,file:///root/.ivy2/jars/io.grpc_grpc-alts-1.51.0.jar,file:///root/.ivy2/jars/io.grpc_grpc-grpclb-1.51.0.jar,file:///root/.ivy2/jars/org.conscrypt_conscrypt-openjdk-uber-2.5.2.jar,file:///root/.ivy2/jars/io.grpc_grpc-protobuf-1.51.0.jar,file:///root/.ivy2/jars/com.google.auth_google-auth-library-credentials-1.13.0.jar,file:///root/.ivy2/jars/com.google.auth_google-auth-library-oauth2-http-1.13.0.jar,file:///root/.ivy2/jars/com.google.api_api-common-2.2.2.jar,file:///root/.ivy2/jars/javax.annotation_javax.annotation-api-1.3.2.jar,file:///root/.ivy2/jars/io.opencensus_opencensus-api-0.31.1.jar,file:///root/.ivy2/jars/io.grpc_grpc-context-1.51.0.jar,file:///root/.ivy2/jars/com.google.api.grpc_proto-google-iam-v1-1.6.22.jar,file:///root/.ivy2/jars/com.google.protobuf_protobuf-java-3.21.10.jar,file:///root/.ivy2/jars/com.google.protobuf_protobuf-java-util-3.21.10.jar,file:///root/.ivy2/jars/com.google.api.grpc_proto-google-common-protos-2.11.0.jar,file:///root/.ivy2/jars/org.threeten_threetenbp-1.6.4.jar,file:///root/.ivy2/jars/com.google.api.grpc_proto-google-cloud-storage-v2-2.16.0-alpha.jar,file:///root/.ivy2/jars/com.google.api.grpc_grpc-google-cloud-storage-v2-2.16.0-alpha.jar,file:///root/.ivy2/jars/com.google.api.grpc_gapic-google-cloud-storage-v2-2.16.0-alpha.jar,file:///root/.ivy2/jars/com.fasterxml.jackson.core_jackson-core-2.14.1.jar,file:///root/.ivy2/jars/com.google.code.findbugs_jsr305-3.0.2.jar,file:///root/.ivy2/jars/io.grpc_grpc-api-1.51.0.jar,file:///root/.ivy2/jars/io.grpc_grpc-auth-1.51.0.jar,file:///root/.ivy2/jars/io.grpc_grpc-stub-1.51.0.jar,file:///root/.ivy2/jars/org.checkerframework_checker-qual-3.28.0.jar,file:///root/.ivy2/jars/com.google.api.grpc_grpc-google-iam-v1-1.6.22.jar,file:///root/.ivy2/jars/io.grpc_grpc-protobuf-lite-1.51.0.jar,file:///root/.ivy2/jars/com.google.android_annotations-4.1.1.4.jar,file:///root/.ivy2/jars/org.codehaus.mojo_animal-sniffer-annotations-1.22.jar,file:///root/.ivy2/jars/io.grpc_grpc-netty-shaded-1.51.0.jar,file:///root/.ivy2/jars/io.perfmark_perfmark-api-0.26.0.jar,file:///root/.ivy2/jars/io.grpc_grpc-googleapis-1.51.0.jar,file:///root/.ivy2/jars/io.grpc_grpc-xds-1.51.0.jar,file:///root/.ivy2/jars/io.opencensus_opencensus-proto-0.2.0.jar,file:///root/.ivy2/jars/io.grpc_grpc-services-1.51.0.jar,file:///root/.ivy2/jars/com.google.re2j_re2j-1.6.jar,file:///root/.ivy2/jars/dk.brics.automaton_automaton-1.11-8.jar,file:///root/.ivy2/jars/org.slf4j_slf4j-api-1.7.16.jar'),\n", " ('spark.sql.cbo.enabled', 'true'),\n", - " ('spark.app.name', 'geoEDA'),\n", + " ('spark.history.fs.logDirectory',\n", + " 'gs://dataproc-temp-us-central1-635155370842-uzamlpgc/40615aee-663d-485d-b4dc-946c4fc9e9bc/spark-job-history'),\n", " ('spark.yarn.dist.jars',\n", " 'file:///root/.ivy2/jars/com.johnsnowlabs.nlp_spark-nlp_2.12-4.4.0.jar,file:///root/.ivy2/jars/graphframes_graphframes-0.8.2-spark3.1-s_2.12.jar,file:///root/.ivy2/jars/com.typesafe_config-1.4.2.jar,file:///root/.ivy2/jars/org.rocksdb_rocksdbjni-6.29.5.jar,file:///root/.ivy2/jars/com.amazonaws_aws-java-sdk-bundle-1.11.828.jar,file:///root/.ivy2/jars/com.github.universal-automata_liblevenshtein-3.0.0.jar,file:///root/.ivy2/jars/com.google.cloud_google-cloud-storage-2.16.0.jar,file:///root/.ivy2/jars/com.navigamez_greex-1.0.jar,file:///root/.ivy2/jars/com.johnsnowlabs.nlp_tensorflow-cpu_2.12-0.4.4.jar,file:///root/.ivy2/jars/it.unimi.dsi_fastutil-7.0.12.jar,file:///root/.ivy2/jars/org.projectlombok_lombok-1.16.8.jar,file:///root/.ivy2/jars/com.google.guava_guava-31.1-jre.jar,file:///root/.ivy2/jars/com.google.guava_failureaccess-1.0.1.jar,file:///root/.ivy2/jars/com.google.guava_listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar,file:///root/.ivy2/jars/com.google.errorprone_error_prone_annotations-2.16.jar,file:///root/.ivy2/jars/com.google.j2objc_j2objc-annotations-1.3.jar,file:///root/.ivy2/jars/com.google.http-client_google-http-client-1.42.3.jar,file:///root/.ivy2/jars/io.opencensus_opencensus-contrib-http-util-0.31.1.jar,file:///root/.ivy2/jars/com.google.http-client_google-http-client-jackson2-1.42.3.jar,file:///root/.ivy2/jars/com.google.http-client_google-http-client-gson-1.42.3.jar,file:///root/.ivy2/jars/com.google.api-client_google-api-client-2.1.1.jar,file:///root/.ivy2/jars/commons-codec_commons-codec-1.15.jar,file:///root/.ivy2/jars/com.google.oauth-client_google-oauth-client-1.34.1.jar,file:///root/.ivy2/jars/com.google.http-client_google-http-client-apache-v2-1.42.3.jar,file:///root/.ivy2/jars/com.google.apis_google-api-services-storage-v1-rev20220705-2.0.0.jar,file:///root/.ivy2/jars/com.google.code.gson_gson-2.10.jar,file:///root/.ivy2/jars/com.google.cloud_google-cloud-core-2.9.0.jar,file:///root/.ivy2/jars/com.google.auto.value_auto-value-annotations-1.10.1.jar,file:///root/.ivy2/jars/com.google.cloud_google-cloud-core-http-2.9.0.jar,file:///root/.ivy2/jars/com.google.http-client_google-http-client-appengine-1.42.3.jar,file:///root/.ivy2/jars/com.google.api_gax-httpjson-0.105.1.jar,file:///root/.ivy2/jars/com.google.cloud_google-cloud-core-grpc-2.9.0.jar,file:///root/.ivy2/jars/io.grpc_grpc-core-1.51.0.jar,file:///root/.ivy2/jars/com.google.api_gax-2.20.1.jar,file:///root/.ivy2/jars/com.google.api_gax-grpc-2.20.1.jar,file:///root/.ivy2/jars/io.grpc_grpc-alts-1.51.0.jar,file:///root/.ivy2/jars/io.grpc_grpc-grpclb-1.51.0.jar,file:///root/.ivy2/jars/org.conscrypt_conscrypt-openjdk-uber-2.5.2.jar,file:///root/.ivy2/jars/io.grpc_grpc-protobuf-1.51.0.jar,file:///root/.ivy2/jars/com.google.auth_google-auth-library-credentials-1.13.0.jar,file:///root/.ivy2/jars/com.google.auth_google-auth-library-oauth2-http-1.13.0.jar,file:///root/.ivy2/jars/com.google.api_api-common-2.2.2.jar,file:///root/.ivy2/jars/javax.annotation_javax.annotation-api-1.3.2.jar,file:///root/.ivy2/jars/io.opencensus_opencensus-api-0.31.1.jar,file:///root/.ivy2/jars/io.grpc_grpc-context-1.51.0.jar,file:///root/.ivy2/jars/com.google.api.grpc_proto-google-iam-v1-1.6.22.jar,file:///root/.ivy2/jars/com.google.protobuf_protobuf-java-3.21.10.jar,file:///root/.ivy2/jars/com.google.protobuf_protobuf-java-util-3.21.10.jar,file:///root/.ivy2/jars/com.google.api.grpc_proto-google-common-protos-2.11.0.jar,file:///root/.ivy2/jars/org.threeten_threetenbp-1.6.4.jar,file:///root/.ivy2/jars/com.google.api.grpc_proto-google-cloud-storage-v2-2.16.0-alpha.jar,file:///root/.ivy2/jars/com.google.api.grpc_grpc-google-cloud-storage-v2-2.16.0-alpha.jar,file:///root/.ivy2/jars/com.google.api.grpc_gapic-google-cloud-storage-v2-2.16.0-alpha.jar,file:///root/.ivy2/jars/com.fasterxml.jackson.core_jackson-core-2.14.1.jar,file:///root/.ivy2/jars/com.google.code.findbugs_jsr305-3.0.2.jar,file:///root/.ivy2/jars/io.grpc_grpc-api-1.51.0.jar,file:///root/.ivy2/jars/io.grpc_grpc-auth-1.51.0.jar,file:///root/.ivy2/jars/io.grpc_grpc-stub-1.51.0.jar,file:///root/.ivy2/jars/org.checkerframework_checker-qual-3.28.0.jar,file:///root/.ivy2/jars/com.google.api.grpc_grpc-google-iam-v1-1.6.22.jar,file:///root/.ivy2/jars/io.grpc_grpc-protobuf-lite-1.51.0.jar,file:///root/.ivy2/jars/com.google.android_annotations-4.1.1.4.jar,file:///root/.ivy2/jars/org.codehaus.mojo_animal-sniffer-annotations-1.22.jar,file:///root/.ivy2/jars/io.grpc_grpc-netty-shaded-1.51.0.jar,file:///root/.ivy2/jars/io.perfmark_perfmark-api-0.26.0.jar,file:///root/.ivy2/jars/io.grpc_grpc-googleapis-1.51.0.jar,file:///root/.ivy2/jars/io.grpc_grpc-xds-1.51.0.jar,file:///root/.ivy2/jars/io.opencensus_opencensus-proto-0.2.0.jar,file:///root/.ivy2/jars/io.grpc_grpc-services-1.51.0.jar,file:///root/.ivy2/jars/com.google.re2j_re2j-1.6.jar,file:///root/.ivy2/jars/dk.brics.automaton_automaton-1.11-8.jar,file:///root/.ivy2/jars/org.slf4j_slf4j-api-1.7.16.jar'),\n", " ('spark.dataproc.sql.parquet.enableFooterCache', 'true'),\n", " ('spark.sql.warehouse.dir', 'file:/spark-warehouse'),\n", " ('spark.yarn.executor.failuresValidityInterval', '1h'),\n", - " ('spark.eventLog.dir',\n", - " 'gs://dataproc-temp-us-central1-635155370842-uzamlpgc/479dade3-720d-4118-bb28-da417fb33080/spark-job-history'),\n", " ('spark.dataproc.metrics.listener.metrics.collector.hostname',\n", " 'hub-msca-bdp-dphub-students-test-ridhi-m'),\n", " ('spark.yarn.am.memory', '640m'),\n", - " ('spark.app.startTime', '1700266549741'),\n", + " ('spark.app.id', 'application_1701272855530_0009'),\n", + " ('spark.ui.proxyBase', '/proxy/application_1701272855530_0009'),\n", " ('spark.jars.packages',\n", " 'com.johnsnowlabs.nlp:spark-nlp_2.12:4.4.0,graphframes:graphframes:0.8.2-spark3.1-s_2.12'),\n", " ('spark.executor.instances', '2'),\n", @@ -97,48 +86,49 @@ " 'com.google.cloud.spark.performance.DataprocMetricsListener'),\n", " ('spark.serializer.objectStreamReset', '100'),\n", " ('spark.submit.deployMode', 'client'),\n", - " ('spark.driver.appUIAddress',\n", - " 'http://hub-msca-bdp-dphub-students-test-ridhi-m.c.msca-bdp-student-ap.internal:38829'),\n", + " ('spark.executor.cores', '8'),\n", " ('spark.sql.cbo.joinReorder.enabled', 'true'),\n", " ('spark.shuffle.service.enabled', 'true'),\n", " ('spark.scheduler.mode', 'FAIR'),\n", + " ('spark.app.startTime', '1701283707463'),\n", " ('spark.sql.adaptive.enabled', 'true'),\n", " ('spark.yarn.jars', 'local:/usr/lib/spark/jars/*'),\n", " ('spark.scheduler.minRegisteredResourcesRatio', '0.0'),\n", - " ('spark.executor.cores', '2'),\n", + " ('spark.driver.port', '37705'),\n", + " ('spark.driver.appUIAddress',\n", + " 'http://hub-msca-bdp-dphub-students-test-ridhi-m.c.msca-bdp-student-ap.internal:38891'),\n", " ('spark.master', 'yarn'),\n", " ('spark.ui.port', '0'),\n", " ('spark.rpc.message.maxSize', '512'),\n", " ('spark.rdd.compress', 'True'),\n", " ('spark.task.maxFailures', '10'),\n", - " ('spark.driver.memory', '3840m'),\n", - " ('spark.dynamicAllocation.enabled', 'true'),\n", " ('spark.yarn.isPython', 'true'),\n", + " ('spark.dynamicAllocation.enabled', 'true'),\n", " ('spark.yarn.historyServer.address',\n", " 'hub-msca-bdp-dphub-students-test-ridhi-m:18080'),\n", " ('spark.ui.showConsoleProgress', 'true')]" ] }, - "execution_count": 6, + "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "spark = SparkSession.builder.appName('geoEDA').getOrCreate()\n", + "spark = SparkSession.builder.appName('geospatial').getOrCreate()\n", "spark.sparkContext.getConf().getAll()" ] }, { "cell_type": "code", - "execution_count": 9, - "id": "fdaf32cf-30be-44e3-b033-efe4ef288d88", + "execution_count": 12, + "id": "478cc7b4-3122-476a-99a2-b407583ff314", "metadata": {}, "outputs": [ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "6cea3dc84275464bbd89d52f54516f75", + "model_id": "86b272b1781641d4a1b4eb473d7cc81e", "version_major": 2, "version_minor": 0 }, @@ -148,66 +138,66 @@ }, "metadata": {}, "output_type": "display_data" - } - ], - "source": [ - "%%bigquery \n", - "\n", - "CREATE OR REPLACE TABLE chicago_rideshare.geo_rides AS\n", - "\n", - "SELECT COUNT(*) AS num_rides, community_areas.community, community_areas.area_num_1, 2018 as year\n", - "FROM `chicago_rideshare.community_areas` AS community_areas\n", - "INNER JOIN `chicago_rideshare.geo_rides_2018` AS ride_locations \n", - "ON ST_CONTAINS(community_areas.geometry, ride_locations.pickup_geo)\n", - "GROUP BY community_areas.community, community_areas.area_num_1\n" - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "id": "9a2df9c7-702b-462d-bfbd-1347ba3764d7", - "metadata": {}, - "outputs": [ + }, { "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "166b2d2041c742dbbc8fc349285bf0a8", - "version_major": 2, - "version_minor": 0 - }, + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
\n", + "
" + ], "text/plain": [ - "Query is running: 0%| |" + "Empty DataFrame\n", + "Columns: []\n", + "Index: []" ] }, + "execution_count": 12, "metadata": {}, - "output_type": "display_data" + "output_type": "execute_result" } ], "source": [ - "%%bigquery \n", + "%%bigquery\n", "\n", - "INSERT INTO chicago_rideshare.geo_rides (num_rides, community, area_num_1, year)\n", - "SELECT \n", - " COUNT(*) AS num_rides,\n", - " community_areas.community,\n", - " community_areas.area_num_1,\n", - " 2019 AS year\n", - "FROM `chicago_rideshare.community_areas` AS community_areas\n", - "INNER JOIN `chicago_rideshare.geo_rides_2019` AS ride_locations \n", - " ON ST_CONTAINS(community_areas.geometry, ride_locations.pickup_geo)\n", - "GROUP BY community_areas.community, community_areas.area_num_1, year;\n" + "UPDATE chicago_rideshare.rides_2018\n", + "SET\n", + " pickup_geo = ST_GEOGPOINT(pickup_lon, pickup_lat),\n", + " dropoff_geo = ST_GEOGPOINT(dropoff_lon, dropoff_lat)\n", + "WHERE true" ] }, { "cell_type": "code", - "execution_count": 11, - "id": "1d593993-2f2c-4e74-8dac-539365fdbd2d", + "execution_count": 13, + "id": "fdaf32cf-30be-44e3-b033-efe4ef288d88", "metadata": {}, "outputs": [ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "c69fee586fd2443c881d8d1daf350c50", + "model_id": "e71ad99253d9409a91cec0795563167f", "version_major": 2, "version_minor": 0 }, @@ -217,69 +207,68 @@ }, "metadata": {}, "output_type": "display_data" - } - ], - "source": [ - "%%bigquery \n", - "\n", - "INSERT INTO chicago_rideshare.geo_rides (num_rides, community, area_num_1, year)\n", - "SELECT \n", - " COUNT(*) AS num_rides,\n", - " community_areas.community,\n", - " community_areas.area_num_1,\n", - " 2020 AS year\n", - "FROM `chicago_rideshare.community_areas` AS community_areas\n", - "INNER JOIN `chicago_rideshare.geo_rides_2020` AS ride_locations \n", - " ON ST_CONTAINS(community_areas.geometry, ride_locations.pickup_geo)\n", - "GROUP BY community_areas.community, community_areas.area_num_1, year;" - ] - }, - { - "cell_type": "code", - "execution_count": 12, - "id": "1ff816db-2bd6-4793-9f3c-9c4c8a8100b7", - "metadata": {}, - "outputs": [ + }, { "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "e8ca72696d3b46a689bc88f2b82f6793", - "version_major": 2, - "version_minor": 0 - }, + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
\n", + "
" + ], "text/plain": [ - "Query is running: 0%| |" + "Empty DataFrame\n", + "Columns: []\n", + "Index: []" ] }, + "execution_count": 13, "metadata": {}, - "output_type": "display_data" + "output_type": "execute_result" } ], "source": [ - "%%bigquery\n", + "%%bigquery \n", "\n", - "INSERT INTO chicago_rideshare.geo_rides (num_rides, community, area_num_1, year)\n", - "SELECT \n", - " COUNT(*) AS num_rides,\n", - " community_areas.community,\n", - " community_areas.area_num_1,\n", - " 2021 AS year\n", + "CREATE OR REPLACE TABLE chicago_rideshare.geo_rides AS\n", + "\n", + "SELECT COUNT(*) AS num_rides, community_areas.community, community_areas.area_num_1, 2018 as year\n", "FROM `chicago_rideshare.community_areas` AS community_areas\n", - "INNER JOIN `chicago_rideshare.geo_rides_2021` AS ride_locations \n", - " ON ST_CONTAINS(community_areas.geometry, ride_locations.pickup_geo)\n", - "GROUP BY community_areas.community, community_areas.area_num_1, year;" + "INNER JOIN `chicago_rideshare.rides_2018` AS ride_locations \n", + "ON ST_CONTAINS(community_areas.geometry, ride_locations.pickup_geo)\n", + "GROUP BY community_areas.community, community_areas.area_num_1\n" ] }, { "cell_type": "code", - "execution_count": 13, - "id": "fc9e5acc-b6fc-48d0-9c1f-5d95f311774b", + "execution_count": 16, + "id": "05e6a3d9-9ad2-4acf-a175-1b18645886cf", "metadata": {}, "outputs": [ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "6a24a53e1ba944189f61ac1d5de9af5e", + "model_id": "738a66586e684d74b35f055c234d4b21", "version_major": 2, "version_minor": 0 }, @@ -289,71 +278,70 @@ }, "metadata": {}, "output_type": "display_data" - } - ], - "source": [ - "%%bigquery \n", - "\n", - "INSERT INTO chicago_rideshare.geo_rides (num_rides, community, area_num_1, year)\n", - "SELECT \n", - " COUNT(*) AS num_rides,\n", - " community_areas.community,\n", - " community_areas.area_num_1,\n", - " 2022 AS year\n", - "FROM `chicago_rideshare.community_areas` AS community_areas\n", - "INNER JOIN `chicago_rideshare.geo_rides_2022` AS ride_locations \n", - " ON ST_CONTAINS(community_areas.geometry, ride_locations.pickup_geo)\n", - "GROUP BY community_areas.community, community_areas.area_num_1, year;" - ] - }, - { - "cell_type": "code", - "execution_count": 14, - "id": "728be0d6-8d44-44be-838c-ef5cc0683268", - "metadata": {}, - "outputs": [ + }, { "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "f579225072144b3988a29170502b1d1b", - "version_major": 2, - "version_minor": 0 - }, + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
\n", + "
" + ], "text/plain": [ - "Query is running: 0%| |" + "Empty DataFrame\n", + "Columns: []\n", + "Index: []" ] }, + "execution_count": 16, "metadata": {}, - "output_type": "display_data" + "output_type": "execute_result" } ], "source": [ - "%%bigquery df\n", + "%%bigquery\n", "\n", - "CREATE OR REPLACE TABLE chicago_rideshare.geo_rides AS\n", + "ALTER TABLE chicago_rideshare.rides_2019\n", + "ADD COLUMN pickup_geo GEOGRAPHY,\n", + "ADD COLUMN dropoff_geo GEOGRAPHY;\n", "\n", - "SELECT \n", - " j.num_rides,\n", - " j.community,\n", - " j.area_num_1,\n", - " j.year,\n", - " c.geometry\n", - "FROM chicago_rideshare.geo_rides j\n", - " INNER JOIN `chicago_rideshare.community_areas` c\n", - "ON j.community = c.community\n", - " ORDER BY j.year" + "UPDATE chicago_rideshare.rides_2019\n", + "SET\n", + " pickup_geo = ST_GEOGPOINT(pickup_lon, pickup_lat),\n", + " dropoff_geo = ST_GEOGPOINT(dropoff_lon, dropoff_lat)\n", + "WHERE true" ] }, { "cell_type": "code", - "execution_count": 16, - "id": "f407c0c6-c79c-4d26-9185-8f3946bfbfb4", + "execution_count": 17, + "id": "9a2df9c7-702b-462d-bfbd-1347ba3764d7", "metadata": {}, "outputs": [ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "04a45a72091e4037a45ec72663aef6c9", + "model_id": "a44ae28adfce41e5bca4674925d6a5e0", "version_major": 2, "version_minor": 0 }, @@ -398,26 +386,1103 @@ "Index: []" ] }, - "execution_count": 16, + "execution_count": 17, "metadata": {}, "output_type": "execute_result" } ], "source": [ - " %%bigquery \n", - "\n", - "CREATE OR REPLACE TABLE chicago_rideshare.geo_program_area_2020 AS\n", + "%%bigquery \n", "\n", + "INSERT INTO chicago_rideshare.geo_rides (num_rides, community, area_num_1, year)\n", "SELECT \n", - " j.*,\n", - " c.geometry,\n", - " c.community\n", - "FROM chicago_rideshare.geo_program_area_2020 j\n", - " INNER JOIN `chicago_rideshare.community_areas` c\n", - "ON j.pickup_area = c.area_num_1\n", - " \n", - " \n", - " " + " COUNT(*) AS num_rides,\n", + " community_areas.community,\n", + " community_areas.area_num_1,\n", + " 2019 AS year\n", + "FROM `chicago_rideshare.community_areas` AS community_areas\n", + "INNER JOIN `chicago_rideshare.rides_2019` AS ride_locations \n", + " ON ST_CONTAINS(community_areas.geometry, ride_locations.pickup_geo)\n", + "GROUP BY community_areas.community, community_areas.area_num_1, year;\n" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "id": "450662fd-6278-4ab9-a016-ab0c443d8e9b", + "metadata": {}, + "outputs": [ + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "ab9f5b122a484236b477bbdfd7341c79", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "Query is running: 0%| |" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
\n", + "
" + ], + "text/plain": [ + "Empty DataFrame\n", + "Columns: []\n", + "Index: []" + ] + }, + "execution_count": 18, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "%%bigquery\n", + "\n", + "ALTER TABLE chicago_rideshare.rides_2020\n", + "ADD COLUMN pickup_geo GEOGRAPHY,\n", + "ADD COLUMN dropoff_geo GEOGRAPHY;\n", + "\n", + "UPDATE chicago_rideshare.rides_2020\n", + "SET\n", + " pickup_geo = ST_GEOGPOINT(pickup_lon, pickup_lat),\n", + " dropoff_geo = ST_GEOGPOINT(dropoff_lon, dropoff_lat)\n", + "WHERE true" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "id": "1d593993-2f2c-4e74-8dac-539365fdbd2d", + "metadata": {}, + "outputs": [ + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "cf4529323a214459905e8ed03ee00b49", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "Query is running: 0%| |" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
\n", + "
" + ], + "text/plain": [ + "Empty DataFrame\n", + "Columns: []\n", + "Index: []" + ] + }, + "execution_count": 19, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "%%bigquery \n", + "\n", + "INSERT INTO chicago_rideshare.geo_rides (num_rides, community, area_num_1, year)\n", + "SELECT \n", + " COUNT(*) AS num_rides,\n", + " community_areas.community,\n", + " community_areas.area_num_1,\n", + " 2020 AS year\n", + "FROM `chicago_rideshare.community_areas` AS community_areas\n", + "INNER JOIN `chicago_rideshare.rides_2020` AS ride_locations \n", + " ON ST_CONTAINS(community_areas.geometry, ride_locations.pickup_geo)\n", + "GROUP BY community_areas.community, community_areas.area_num_1, year;" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "id": "d9ce968d-ef9a-4837-94f2-a17597a0a835", + "metadata": {}, + "outputs": [ + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "bdd2ae81e50b47f5ba41d6ee6b72e149", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "Query is running: 0%| |" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
\n", + "
" + ], + "text/plain": [ + "Empty DataFrame\n", + "Columns: []\n", + "Index: []" + ] + }, + "execution_count": 20, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "%%bigquery\n", + "\n", + "ALTER TABLE chicago_rideshare.rides_2021\n", + "ADD COLUMN pickup_geo GEOGRAPHY,\n", + "ADD COLUMN dropoff_geo GEOGRAPHY;\n", + "\n", + "UPDATE chicago_rideshare.rides_2021\n", + "SET\n", + " pickup_geo = ST_GEOGPOINT(pickup_lon, pickup_lat),\n", + " dropoff_geo = ST_GEOGPOINT(dropoff_lon, dropoff_lat)\n", + "WHERE true" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "id": "1ff816db-2bd6-4793-9f3c-9c4c8a8100b7", + "metadata": {}, + "outputs": [ + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "a4ea42841c044132b0ee898731a331db", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "Query is running: 0%| |" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
\n", + "
" + ], + "text/plain": [ + "Empty DataFrame\n", + "Columns: []\n", + "Index: []" + ] + }, + "execution_count": 21, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "%%bigquery\n", + "\n", + "INSERT INTO chicago_rideshare.geo_rides (num_rides, community, area_num_1, year)\n", + "SELECT \n", + " COUNT(*) AS num_rides,\n", + " community_areas.community,\n", + " community_areas.area_num_1,\n", + " 2021 AS year\n", + "FROM `chicago_rideshare.community_areas` AS community_areas\n", + "INNER JOIN `chicago_rideshare.rides_2021` AS ride_locations \n", + " ON ST_CONTAINS(community_areas.geometry, ride_locations.pickup_geo)\n", + "GROUP BY community_areas.community, community_areas.area_num_1, year;" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "id": "31b92a87-01f4-4e9b-9f8d-3055640515c8", + "metadata": {}, + "outputs": [ + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "7f1e822b11af499188a0d02bac4821c4", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "Query is running: 0%| |" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
\n", + "
" + ], + "text/plain": [ + "Empty DataFrame\n", + "Columns: []\n", + "Index: []" + ] + }, + "execution_count": 22, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "%%bigquery\n", + "\n", + "ALTER TABLE chicago_rideshare.rides_2022\n", + "ADD COLUMN pickup_geo GEOGRAPHY,\n", + "ADD COLUMN dropoff_geo GEOGRAPHY;\n", + "\n", + "UPDATE chicago_rideshare.rides_2022\n", + "SET\n", + " pickup_geo = ST_GEOGPOINT(pickup_lon, pickup_lat),\n", + " dropoff_geo = ST_GEOGPOINT(dropoff_lon, dropoff_lat)\n", + "WHERE true" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "id": "fc9e5acc-b6fc-48d0-9c1f-5d95f311774b", + "metadata": {}, + "outputs": [ + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "d7602c74f9f9451aa3f0e116543ffdc7", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "Query is running: 0%| |" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
\n", + "
" + ], + "text/plain": [ + "Empty DataFrame\n", + "Columns: []\n", + "Index: []" + ] + }, + "execution_count": 23, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "%%bigquery \n", + "\n", + "INSERT INTO chicago_rideshare.geo_rides (num_rides, community, area_num_1, year)\n", + "SELECT \n", + " COUNT(*) AS num_rides,\n", + " community_areas.community,\n", + " community_areas.area_num_1,\n", + " 2022 AS year\n", + "FROM `chicago_rideshare.community_areas` AS community_areas\n", + "INNER JOIN `chicago_rideshare.rides_2022` AS ride_locations \n", + " ON ST_CONTAINS(community_areas.geometry, ride_locations.pickup_geo)\n", + "GROUP BY community_areas.community, community_areas.area_num_1, year;" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "id": "728be0d6-8d44-44be-838c-ef5cc0683268", + "metadata": {}, + "outputs": [ + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "098e0137751d484eb6ba07827637eff7", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "Query is running: 0%| |" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "%%bigquery df\n", + "\n", + "CREATE OR REPLACE TABLE chicago_rideshare.geo_rides AS\n", + "\n", + "SELECT \n", + " j.num_rides,\n", + " j.community,\n", + " j.area_num_1,\n", + " j.year,\n", + " c.geometry\n", + "FROM chicago_rideshare.geo_rides j\n", + " INNER JOIN `chicago_rideshare.community_areas` c\n", + "ON j.community = c.community\n", + " ORDER BY j.year" + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "id": "79724116-a9bc-4160-9ded-44ec394c0f73", + "metadata": {}, + "outputs": [ + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "f1bdf16f24ba492ab8768de5025046e1", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "Query is running: 0%| |" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
\n", + "
" + ], + "text/plain": [ + "Empty DataFrame\n", + "Columns: []\n", + "Index: []" + ] + }, + "execution_count": 25, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "%%bigquery\n", + "\n", + "ALTER TABLE chicago_rideshare.program_area_time_rides_2018\n", + "ADD COLUMN pickup_geo GEOGRAPHY,\n", + "ADD COLUMN dropoff_geo GEOGRAPHY;\n", + "\n", + "UPDATE chicago_rideshare.program_area_time_rides_2018\n", + "SET\n", + " pickup_geo = ST_GEOGPOINT(pickup_lon, pickup_lat),\n", + " dropoff_geo = ST_GEOGPOINT(dropoff_lon, dropoff_lat)\n", + "WHERE true" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "id": "2c35b3e0-e1c9-4089-88df-f0290912831e", + "metadata": {}, + "outputs": [ + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "6d76ad05f8644fa1897143d42cfe45ff", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "Query is running: 0%| |" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
\n", + "
" + ], + "text/plain": [ + "Empty DataFrame\n", + "Columns: []\n", + "Index: []" + ] + }, + "execution_count": 26, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "%%bigquery \n", + "\n", + "CREATE OR REPLACE TABLE chicago_rideshare.geo_program_rides AS\n", + "\n", + "SELECT \n", + " j.*,\n", + " c.geometry,\n", + " c.community,\n", + " 2018 as year\n", + "FROM chicago_rideshare.program_area_time_rides_2018 j\n", + " INNER JOIN `chicago_rideshare.community_areas` c\n", + "ON j.pickup_area = c.area_num_1\n" + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "id": "9ff2186a-5b19-437a-9324-881e63ad2200", + "metadata": {}, + "outputs": [ + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "cef795399b6d4244996427fb37627763", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "Query is running: 0%| |" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
\n", + "
" + ], + "text/plain": [ + "Empty DataFrame\n", + "Columns: []\n", + "Index: []" + ] + }, + "execution_count": 27, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "%%bigquery\n", + "\n", + "\n", + "ALTER TABLE chicago_rideshare.program_area_time_rides_2019\n", + "ADD COLUMN pickup_geo GEOGRAPHY,\n", + "ADD COLUMN dropoff_geo GEOGRAPHY;\n", + "\n", + "UPDATE chicago_rideshare.program_area_time_rides_2019\n", + "SET\n", + " pickup_geo = ST_GEOGPOINT(pickup_lon, pickup_lat),\n", + " dropoff_geo = ST_GEOGPOINT(dropoff_lon, dropoff_lat)\n", + "WHERE true" + ] + }, + { + "cell_type": "code", + "execution_count": 31, + "id": "71a99783-b9ec-4934-a4ba-a76fcd56f307", + "metadata": {}, + "outputs": [ + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "7d61369ff00449eeacbf48e17f7bbeb6", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "Query is running: 0%| |" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
\n", + "
" + ], + "text/plain": [ + "Empty DataFrame\n", + "Columns: []\n", + "Index: []" + ] + }, + "execution_count": 31, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "%%bigquery \n", + "\n", + "INSERT INTO chicago_rideshare.geo_program_rides (ID, start_timestamp,end_timestamp, seconds, miles, pickup_tract,dropoff_tract,\n", + " pickup_area, dropoff_area, Fare,Tip,total, pickup_lat,pickup_lon,\n", + " dropoff_lat, dropoff_lon, month, day_of_month, hour, day, pickup_geo,\n", + " dropoff_geo, geometry, community, year)\n", + "\n", + "SELECT \n", + " j.*,\n", + " c.geometry,\n", + " c.community,\n", + " 2019 as year\n", + "FROM chicago_rideshare.program_area_time_rides_2019 j\n", + "INNER JOIN `chicago_rideshare.community_areas` c\n", + "ON j.pickup_area = c.area_num_1;" + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "id": "f0c14441-d2ad-4777-99e9-f89642e1f19a", + "metadata": {}, + "outputs": [ + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "f210ef2534cd44fa92a1736cd7461d8d", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "Query is running: 0%| |" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
\n", + "
" + ], + "text/plain": [ + "Empty DataFrame\n", + "Columns: []\n", + "Index: []" + ] + }, + "execution_count": 29, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "%%bigquery\n", + "\n", + "\n", + "ALTER TABLE chicago_rideshare.program_area_time_rides_2021\n", + "ADD COLUMN pickup_geo GEOGRAPHY,\n", + "ADD COLUMN dropoff_geo GEOGRAPHY;\n", + "\n", + "\n", + "UPDATE chicago_rideshare.program_area_time_rides_2021\n", + "SET\n", + " pickup_geo = ST_GEOGPOINT(pickup_lon, pickup_lat),\n", + " dropoff_geo = ST_GEOGPOINT(dropoff_lon, dropoff_lat)\n", + "WHERE true" + ] + }, + { + "cell_type": "code", + "execution_count": 32, + "id": "7694f27d-cdad-4dc9-99fa-d1b02e951dec", + "metadata": {}, + "outputs": [ + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "5e11658f47264b02890afc2eda1ec984", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "Query is running: 0%| |" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
\n", + "
" + ], + "text/plain": [ + "Empty DataFrame\n", + "Columns: []\n", + "Index: []" + ] + }, + "execution_count": 32, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "%%bigquery \n", + "\n", + "INSERT INTO chicago_rideshare.geo_program_rides (ID, start_timestamp,end_timestamp, seconds, miles, pickup_tract,dropoff_tract,\n", + " pickup_area, dropoff_area, Fare,Tip,total, pickup_lat,pickup_lon,\n", + " dropoff_lat, dropoff_lon, month, day_of_month, hour, day, pickup_geo,\n", + " dropoff_geo, geometry, community, year)\n", + "SELECT \n", + " j.*,\n", + " c.geometry,\n", + " c.community,\n", + " 2021 as year\n", + "FROM chicago_rideshare.program_area_time_rides_2021 j\n", + "INNER JOIN `chicago_rideshare.community_areas` c\n", + "ON j.pickup_area = c.area_num_1;" + ] + }, + { + "cell_type": "code", + "execution_count": 33, + "id": "0deaf95a-b48f-4a26-8a34-8ae53ae7c026", + "metadata": {}, + "outputs": [ + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "9572ef17ba50425493681150af3f7b9d", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "Query is running: 0%| |" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
\n", + "
" + ], + "text/plain": [ + "Empty DataFrame\n", + "Columns: []\n", + "Index: []" + ] + }, + "execution_count": 33, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "%%bigquery\n", + "\n", + "\n", + "ALTER TABLE chicago_rideshare.program_area_time_rides_2022\n", + "ADD COLUMN pickup_geo GEOGRAPHY,\n", + "ADD COLUMN dropoff_geo GEOGRAPHY;\n", + "\n", + "\n", + "UPDATE chicago_rideshare.program_area_time_rides_2022\n", + "SET\n", + " pickup_geo = ST_GEOGPOINT(pickup_lon, pickup_lat),\n", + " dropoff_geo = ST_GEOGPOINT(dropoff_lon, dropoff_lat)\n", + "WHERE true" + ] + }, + { + "cell_type": "code", + "execution_count": 34, + "id": "f407c0c6-c79c-4d26-9185-8f3946bfbfb4", + "metadata": {}, + "outputs": [ + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "215e788cdf4a4c4fb164b9f97d3c90cb", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "Query is running: 0%| |" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
\n", + "
" + ], + "text/plain": [ + "Empty DataFrame\n", + "Columns: []\n", + "Index: []" + ] + }, + "execution_count": 34, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "%%bigquery \n", + "\n", + "INSERT INTO chicago_rideshare.geo_program_rides (ID, start_timestamp,end_timestamp, seconds, miles, pickup_tract,dropoff_tract,\n", + " pickup_area, dropoff_area, Fare,Tip,total, pickup_lat,pickup_lon,\n", + " dropoff_lat, dropoff_lon, month, day_of_month, hour, day, pickup_geo,\n", + " dropoff_geo, geometry, community, year)\n", + "SELECT \n", + " j.*,\n", + " c.geometry,\n", + " c.community,\n", + " 2022 as year\n", + "FROM chicago_rideshare.program_area_time_rides_2022 j\n", + "INNER JOIN `chicago_rideshare.community_areas` c\n", + "ON j.pickup_area = c.area_num_1;" ] }, {