diff --git a/eda_2020.ipynb b/eda_2020.ipynb new file mode 100644 index 0000000..a5c6376 --- /dev/null +++ b/eda_2020.ipynb @@ -0,0 +1,934 @@ +{ + "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": "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/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+OTTz7B5MmTsXLlSvnt8XKfxcXFmDZtGr7//nskJiZ6fVy83O+4cePk/+/Tpw+GDh2Kzp0747333sOFF14IIH7u1Wq1YuDAgZg9ezYAoKCgADt37sS8efMwadIk+XHxcr/O3nnnHYwbNw65ubkur4+Xe128eDE++OADfPjhh+jVqxcKCwsxffp05ObmYvLkyfLjQr3fmCmdtGzZEhqNpl72orS0tF60FU+kTvZ4u++pU6fiiy++wM8//+xymm+83W9CQgK6dOmCgQMHYs6cOejXrx9efPHFuLvPTZs2obS0FAMGDIBWq4VWq8XKlSvx0ksvQavVyvcUL/frLiUlBX369MG+ffvi7mubk5ODnj17uryuR48eOHr0KID4+zcrOXLkCH744Qfcfffd8uvi7V7/+te/4v/+7/9w8803o0+fPrj99tvx4IMPYs6cOQDCd78xE2gkJCRgwIABWL58ucvrly9fjosuuqiRrkp5HTt2RHZ2tst9G41GrFy5MibvWwiBBx54AJ9++il++ukndOzY0eXt8Xa/7oQQMBgMcXefY8aMwfbt21FYWCi/DBw4EBMnTkRhYSE6deoUV/frzmAwYPfu3cjJyYm7r+2wYcPqjaDv3bsX7du3BxC//2bnz5+PrKwsjB8/Xn5dvN1rTU0N1GrXMECj0cjjrWG73+D7VSNPGm995513xK5du8T06dNFSkqKOHz4cGNfWkgqKyvFli1bxJYtWwQA8dxzz4ktW7bIY7vPPPOMyMjIEJ9++qnYvn27uOWWW2J2nOq+++4TGRkZYsWKFS4jZDU1NfJj4uV+Z82aJVatWiUOHToktm3bJh555BGhVqvF999/L4SIn/v0xnnqRIj4ut+HH35YrFixQhw8eFCsXbtWXHXVVSItLU3+WRRP97p+/Xqh1WrF008/Lfbt2ycWLlwokpOTxQcffCA/Jp7uVwghLBaLaNeunZg5c2a9t8XTvU6ePFm0adNGHm/99NNPRcuWLcWMGTPkx4TjfmMq0BBCiFdffVW0b99eJCQkiAsuuEAei4xlP//8swBQ72Xy5MlCCNuI0eOPPy6ys7OFXq8XF198sdi+fXvjXnSQPN0nADF//nz5MfFyv3fddZf8vdqqVSsxZswYOcgQIn7u0xv3QCOe7lfaJaDT6URubq649tprxc6dO+W3x9O9CiHEl19+KXr37i30er3Iz88Xb775psvb4+1+v/vuOwFAFBUV1XtbPN1rRUWFmDZtmmjXrp1ITEwUnTp1En/729+EwWCQHxOO++XprURERKSYmOnRICIiotjDQIOIiIgUw0CDiIiIFMNAg4iIiBTDQIOIiIgUw0CDiIiIFMNAg4iIiBTDQIOIiIgUw0CDKI506NABL7zwgl+Pfffdd9GsWTNFr4eIKOaOiSci7zZs2ICUlJTGvgwiIhkDDaI40qpVq8a+BEVZLBaoVKp6J04SUfTiv1aiGDJy5Eg88MADeOCBB9CsWTNkZmbi0UcfhXRkkXvp5Pz587jnnnvQunVrJCYmonfv3li2bJnHj33mzBkMHjwYv/vd71BXV4eRI0di+vTpLo+ZMGEC7rjjDvnPHTp0wJNPPolbb70VqampyM3Nxcsvv+z3/Tz33HPo06cPUlJSkJeXh/vvvx9VVVXy26XyzrJly9CzZ0/o9XocOXIERqMRM2bMQJs2bZCSkoIhQ4ZgxYoVLvdyyy23oG3btkhOTkafPn3w0Ucf+X1dRBQ+DDSIYsx7770HrVaLdevW4aWXXsLzzz+Pt99+u97jrFYrxo0bh19//RUffPABdu3ahWeeeQYajabeY48dO4YRI0YgPz8fn376KRITE/2+nn//+9/o27cvNm/ejFmzZuHBBx/E8uXL/XpftVqNl156CTt27MB7772Hn376CTNmzHB5TE1NDebMmYO3334bO3fuRFZWFu68806sWbMGixYtwrZt23DDDTfgiiuuwL59+wAAdXV1GDBgAJYtW4YdO3bgnnvuwe23345169b5fV9EFCZhPXOWiBR1ySWXiB49egir1Sq/bubMmaJHjx5CCCHat28vnn/+eSGE7ahrtVrt8ahrIYSYP3++yMjIEEVFRaJdu3Zi6tSpLh/X/Zh3IYS45pprxOTJk+U/t2/fXlxxxRUuj7npppvEuHHjgrq/jz/+WGRmZrpcIwBRWFgov27//v1CpVKJ48ePu7zvmDFjxKxZs7x+7CuvvFI8/PDDQV0XEQWPPRpEMebCCy+ESqWS/zx06FDMnTsXFovF5XGFhYVo27YtunXr5vVj1dbWYvjw4bjlllvw4osvBnU9Q4cOrfdnfydffv75Z8yePRu7du1CRUUFzGYz6urqUF1dLTe1JiQkoG/fvvL7bN68GUKIevdlMBiQmZkJwNbL8cwzz2Dx4sU4fvw4DAYDDAYDG2WJGgEDDaI4lZSU1OBj9Ho9xo4di6+++gp//etf0bZtW/ltarVa7v2QmEwmvz63cyDkzZEjR3DllVfi3nvvxZNPPokWLVpg9erV+MMf/uDyeZKSklw+ntVqhUajwaZNm+qVgVJTUwEAc+fOxfPPP48XXnhB7gGZPn06jEajX9dPROHDHg2iGLN27dp6f+7atWu9J92+ffvi2LFj2Lt3r9ePpVar8f7772PAgAEYPXo0Tpw4Ib+tVatWOHnypPxni8WCHTt2+HU9+fn5Dd7Hxo0bYTabMXfuXFx44YXo1q2by+f3pqCgABaLBaWlpejSpYvLS3Z2NgDgl19+wTXXXIPbbrsN/fr1Q6dOneT+DSKKLAYaRDGmuLgYDz30EIqKivDRRx/h5ZdfxrRp0+o97pJLLsHFF1+M6667DsuXL8ehQ4fwzTff4Ntvv3V5nEajwcKFC9GvXz+MHj0aJSUlAIDRo0fjq6++wldffYU9e/bg/vvvx/nz5+t9njVr1uBf//oX9u7di1dffRVLlizxeD3uOnfuDLPZjJdffhkHDx7E+++/j9dff73B9+vWrRsmTpyISZMm4dNPP8WhQ4ewYcMGPPvss/j6668BAF26dMHy5cvx66+/Yvfu3fjTn/4k3xcRRRYDDaIYM2nSJNTW1mLw4MGYMmUKpk6dinvuucfjYz/55BMMGjQIt9xyC3r27IkZM2bU6+UAAK1Wi48++gi9evXC6NGjUVpairvuuguTJ0/GpEmTcMkll6Bjx44YNWpUvfd9+OGHsWnTJhQUFODJJ5/E3Llzcfnllzd4H/3798dzzz2HZ599Fr1798bChQsxZ84cv/4O5s+fj0mTJuHhhx9G9+7d8bvf/Q7r1q1DXl4eAOCxxx7DBRdcgMsvvxwjR45EdnY2JkyY4NfHJqLwUgn3IiwRRa2RI0eif//+fjdbKq1Dhw6YPn16vX0bREQSZjSIiIhIMQw0iEgRCxcuRGpqqseXXr16NfblEVGEsHRCRIqorKzEqVOnPL5Np9Ohffv2Eb4iImoMDDSIiIhIMSydEBERkWIYaBAREZFiGGgQERGRYhhoEBERkWIYaBAREZFiGGgQERGRYhhoEBERkWIYaBAREZFi/h+zZWaHX4jPiQAAAABJRU5ErkJggg==", + "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/geospatial_eda.ipynb b/geospatial_eda.ipynb new file mode 100644 index 0000000..8a3af89 --- /dev/null +++ b/geospatial_eda.ipynb @@ -0,0 +1,174 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "id": "fb040c78-f159-4850-8946-27e19dc6729f", + "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": 18, + "id": "c235ef8e-4e33-4fb4-827e-0d343db73988", + "metadata": {}, + "outputs": [], + "source": [ + "import os\n", + "\n", + "# Import library to enable some interactive widgets\n", + "import ipywidgets as widgets\n", + "# Import options from itables separately\n", + "#import itables.options as itable_opts\n", + "# Import basic Python data science libraries\n", + "import numpy as np\n", + "import pandas as pd\n", + "# Import plotly express for quick plots\n", + "#import plotly.express as px\n", + "# Import AI Platform library (as Vertex AI) and BigQuery library\n", + "#from google.cloud import aiplatform as vertex_ai\n", + "from google.cloud import bigquery\n", + "# Import Exceptions library to help with error catching\n", + "from google.cloud.exceptions import BadRequest\n", + "# Import IPython display utilities\n", + "from IPython.display import clear_output\n", + "# Import particular interactive capabilities\n", + "from ipywidgets import interact\n", + "# Import itables for interactive tables\n", + "#from itables import show" + ] + }, + { + "cell_type": "code", + "execution_count": 38, + "id": "4aac6254-756b-4b5b-9374-2d55ec317b60", + "metadata": {}, + "outputs": [], + "source": [ + "PROJECT_ID='MSCA BDP Student - AP'" + ] + }, + { + "cell_type": "code", + "execution_count": 58, + "id": "e267adf2-b7a9-44b6-93ac-cf06344f07be", + "metadata": {}, + "outputs": [], + "source": [ + "bq_client = bigquery.Client(project='msca-bdp-student-ap')\n" + ] + }, + { + "cell_type": "code", + "execution_count": 59, + "id": "81ab5e0d-9a33-4ac9-8428-8dacd397ae87", + "metadata": {}, + "outputs": [], + "source": [ + "dataset_id = 'geodata'\n", + "table_id = 'community'" + ] + }, + { + "cell_type": "code", + "execution_count": 61, + "id": "01b5581a-4188-4e5b-806c-a452ab8879c1", + "metadata": {}, + "outputs": [ + { + "ename": "NotFound", + "evalue": "404 POST https://bigquery.googleapis.com/bigquery/v2/projects/msca-bdp-student-ap/jobs?prettyPrint=false: Not found: Dataset msca-bdp-student-ap:boundaries_community_areas_current", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mNotFound\u001b[0m Traceback (most recent call last)", + "Cell \u001b[0;32mIn[61], line 11\u001b[0m\n\u001b[1;32m 8\u001b[0m \u001b[38;5;66;03m#dataset_ref = msca-bdp-student-ap.dataset('geodata')\u001b[39;00m\n\u001b[1;32m 9\u001b[0m table_ref \u001b[38;5;241m=\u001b[39m dataset_ref\u001b[38;5;241m.\u001b[39mtable(\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mcommunity\u001b[39m\u001b[38;5;124m'\u001b[39m)\n\u001b[0;32m---> 11\u001b[0m load_job \u001b[38;5;241m=\u001b[39m \u001b[43mbq_client\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mload_table_from_uri\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 12\u001b[0m \u001b[43m \u001b[49m\u001b[43muri\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43mmsca-bdp-student-ap.boundaries_community_areas_current.community\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mjob_config\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mjob_config\u001b[49m\n\u001b[1;32m 13\u001b[0m \u001b[43m)\u001b[49m\n\u001b[1;32m 15\u001b[0m load_job\u001b[38;5;241m.\u001b[39mresult() \u001b[38;5;66;03m# Waits for the job to complete\u001b[39;00m\n", + "File \u001b[0;32m/opt/conda/miniconda3/lib/python3.8/site-packages/google/cloud/bigquery/client.py:2375\u001b[0m, in \u001b[0;36mClient.load_table_from_uri\u001b[0;34m(self, source_uris, destination, job_id, job_id_prefix, location, project, job_config, retry, timeout)\u001b[0m\n\u001b[1;32m 2372\u001b[0m new_job_config \u001b[38;5;241m=\u001b[39m job_config\u001b[38;5;241m.\u001b[39m_fill_from_default(\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_default_load_job_config)\n\u001b[1;32m 2374\u001b[0m load_job \u001b[38;5;241m=\u001b[39m job\u001b[38;5;241m.\u001b[39mLoadJob(job_ref, source_uris, destination, \u001b[38;5;28mself\u001b[39m, new_job_config)\n\u001b[0;32m-> 2375\u001b[0m \u001b[43mload_job\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_begin\u001b[49m\u001b[43m(\u001b[49m\u001b[43mretry\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mretry\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mtimeout\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mtimeout\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 2377\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m load_job\n", + "File \u001b[0;32m/opt/conda/miniconda3/lib/python3.8/site-packages/google/cloud/bigquery/job/base.py:693\u001b[0m, in \u001b[0;36m_AsyncJob._begin\u001b[0;34m(self, client, retry, timeout)\u001b[0m\n\u001b[1;32m 690\u001b[0m \u001b[38;5;66;03m# jobs.insert is idempotent because we ensure that every new\u001b[39;00m\n\u001b[1;32m 691\u001b[0m \u001b[38;5;66;03m# job has an ID.\u001b[39;00m\n\u001b[1;32m 692\u001b[0m span_attributes \u001b[38;5;241m=\u001b[39m {\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mpath\u001b[39m\u001b[38;5;124m\"\u001b[39m: path}\n\u001b[0;32m--> 693\u001b[0m api_response \u001b[38;5;241m=\u001b[39m \u001b[43mclient\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_call_api\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 694\u001b[0m \u001b[43m \u001b[49m\u001b[43mretry\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 695\u001b[0m \u001b[43m \u001b[49m\u001b[43mspan_name\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mBigQuery.job.begin\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m,\u001b[49m\n\u001b[1;32m 696\u001b[0m \u001b[43m \u001b[49m\u001b[43mspan_attributes\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mspan_attributes\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 697\u001b[0m \u001b[43m \u001b[49m\u001b[43mjob_ref\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[43m,\u001b[49m\n\u001b[1;32m 698\u001b[0m \u001b[43m \u001b[49m\u001b[43mmethod\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mPOST\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m,\u001b[49m\n\u001b[1;32m 699\u001b[0m \u001b[43m \u001b[49m\u001b[43mpath\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mpath\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 700\u001b[0m \u001b[43m \u001b[49m\u001b[43mdata\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mto_api_repr\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 701\u001b[0m \u001b[43m \u001b[49m\u001b[43mtimeout\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mtimeout\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 702\u001b[0m \u001b[43m\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 703\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_set_properties(api_response)\n", + "File \u001b[0;32m/opt/conda/miniconda3/lib/python3.8/site-packages/google/cloud/bigquery/client.py:808\u001b[0m, in \u001b[0;36mClient._call_api\u001b[0;34m(self, retry, span_name, span_attributes, job_ref, headers, **kwargs)\u001b[0m\n\u001b[1;32m 804\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m span_name \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[1;32m 805\u001b[0m \u001b[38;5;28;01mwith\u001b[39;00m create_span(\n\u001b[1;32m 806\u001b[0m name\u001b[38;5;241m=\u001b[39mspan_name, attributes\u001b[38;5;241m=\u001b[39mspan_attributes, client\u001b[38;5;241m=\u001b[39m\u001b[38;5;28mself\u001b[39m, job_ref\u001b[38;5;241m=\u001b[39mjob_ref\n\u001b[1;32m 807\u001b[0m ):\n\u001b[0;32m--> 808\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mcall\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 810\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m call()\n", + "File \u001b[0;32m/opt/conda/miniconda3/lib/python3.8/site-packages/google/api_core/retry.py:349\u001b[0m, in \u001b[0;36mRetry.__call__..retry_wrapped_func\u001b[0;34m(*args, **kwargs)\u001b[0m\n\u001b[1;32m 345\u001b[0m target \u001b[38;5;241m=\u001b[39m functools\u001b[38;5;241m.\u001b[39mpartial(func, \u001b[38;5;241m*\u001b[39margs, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs)\n\u001b[1;32m 346\u001b[0m sleep_generator \u001b[38;5;241m=\u001b[39m exponential_sleep_generator(\n\u001b[1;32m 347\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_initial, \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_maximum, multiplier\u001b[38;5;241m=\u001b[39m\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_multiplier\n\u001b[1;32m 348\u001b[0m )\n\u001b[0;32m--> 349\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mretry_target\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 350\u001b[0m \u001b[43m \u001b[49m\u001b[43mtarget\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 351\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_predicate\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 352\u001b[0m \u001b[43m \u001b[49m\u001b[43msleep_generator\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 353\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_timeout\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 354\u001b[0m \u001b[43m \u001b[49m\u001b[43mon_error\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mon_error\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 355\u001b[0m \u001b[43m\u001b[49m\u001b[43m)\u001b[49m\n", + "File \u001b[0;32m/opt/conda/miniconda3/lib/python3.8/site-packages/google/api_core/retry.py:191\u001b[0m, in \u001b[0;36mretry_target\u001b[0;34m(target, predicate, sleep_generator, timeout, on_error, **kwargs)\u001b[0m\n\u001b[1;32m 189\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m sleep \u001b[38;5;129;01min\u001b[39;00m sleep_generator:\n\u001b[1;32m 190\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[0;32m--> 191\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mtarget\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 193\u001b[0m \u001b[38;5;66;03m# pylint: disable=broad-except\u001b[39;00m\n\u001b[1;32m 194\u001b[0m \u001b[38;5;66;03m# This function explicitly must deal with broad exceptions.\u001b[39;00m\n\u001b[1;32m 195\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m \u001b[38;5;167;01mException\u001b[39;00m \u001b[38;5;28;01mas\u001b[39;00m exc:\n", + "File \u001b[0;32m/opt/conda/miniconda3/lib/python3.8/site-packages/google/cloud/_http/__init__.py:494\u001b[0m, in \u001b[0;36mJSONConnection.api_request\u001b[0;34m(self, method, path, query_params, data, content_type, headers, api_base_url, api_version, expect_json, _target_object, timeout, extra_api_info)\u001b[0m\n\u001b[1;32m 482\u001b[0m response \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_make_request(\n\u001b[1;32m 483\u001b[0m method\u001b[38;5;241m=\u001b[39mmethod,\n\u001b[1;32m 484\u001b[0m url\u001b[38;5;241m=\u001b[39murl,\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 490\u001b[0m extra_api_info\u001b[38;5;241m=\u001b[39mextra_api_info,\n\u001b[1;32m 491\u001b[0m )\n\u001b[1;32m 493\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;241m200\u001b[39m \u001b[38;5;241m<\u001b[39m\u001b[38;5;241m=\u001b[39m response\u001b[38;5;241m.\u001b[39mstatus_code \u001b[38;5;241m<\u001b[39m \u001b[38;5;241m300\u001b[39m:\n\u001b[0;32m--> 494\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m exceptions\u001b[38;5;241m.\u001b[39mfrom_http_response(response)\n\u001b[1;32m 496\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m expect_json \u001b[38;5;129;01mand\u001b[39;00m response\u001b[38;5;241m.\u001b[39mcontent:\n\u001b[1;32m 497\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m response\u001b[38;5;241m.\u001b[39mjson()\n", + "\u001b[0;31mNotFound\u001b[0m: 404 POST https://bigquery.googleapis.com/bigquery/v2/projects/msca-bdp-student-ap/jobs?prettyPrint=false: Not found: Dataset msca-bdp-student-ap:boundaries_community_areas_current" + ] + } + ], + "source": [ + "uri = 'gs://msca-bdp-student-gcs/bdp-rideshare-project/neighborhoods/geojson/boundaries_community_areas_current.geojson' \n", + "\n", + "job_config = bigquery.LoadJobConfig(\n", + " source_format=bigquery.SourceFormat.NEWLINE_DELIMITED_JSON,\n", + " autodetect=True\n", + ")\n", + "\n", + "#dataset_ref = msca-bdp-student-ap.dataset('geodata')\n", + "table_ref = dataset_ref.table('community')\n", + "\n", + "load_job = bq_client.load_table_from_uri(\n", + " uri, 'msca-bdp-student-ap.geodata.community, job_config=job_config\n", + ")\n", + "\n", + "load_job.result() # Waits for the job to complete\n" + ] + }, + { + "cell_type": "code", + "execution_count": 53, + "id": "782a11b0-03db-49dd-8cea-f204c34a6576", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "BigQuery error in load operation: Not found: Dataset msca-bdp-student-ap:geodata\n" + ] + } + ], + "source": [ + "!bq load \\\n", + " --source_format=NEWLINE_DELIMITED_JSON \\\n", + " --json_extension=GEOJSON \\\n", + " --autodetect \\\n", + " geodata.COMMUNITY \\\n", + " gs://msca-bdp-student-gcs/bdp-rideshare-project/neighborhoods/geojson/boundaries_community_areas_current.geojson" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "d071505f-7b5b-4bae-95d4-7700a2c10ef7", + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "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 +}