From 1e8c0d4d0e927cb32640ddb5211636f20c6747a3 Mon Sep 17 00:00:00 2001 From: Vighnesh <149361506+vighnesh-wednesday@users.noreply.github.com> Date: Thu, 14 Nov 2024 11:11:07 +0530 Subject: [PATCH] Fix: Removing depreciated support & adding new setup changes (#16) * setup changes * CI - fix, checkout update * using awsglue whl file * updated pylint version * updated test cases * added assets & changes --- .github/workflows/ci.yml | 7 +++++-- assets/aws_glue_libs-4.0.0-py3-none-any.whl | Bin 0 -> 67255 bytes automation/glue_setup.sh | 8 +++++--- jobs/demo.py | 4 ++-- jobs/main.py | 4 ++-- requirements.txt | 3 ++- tests/test_spark_wrapper_failure.py | 18 ++++++++++++------ 7 files changed, 28 insertions(+), 16 deletions(-) create mode 100644 assets/aws_glue_libs-4.0.0-py3-none-any.whl diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 1808d74..bdb9e44 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -9,17 +9,20 @@ on: jobs: run-ci: runs-on: ubuntu-latest - container: vighneshwed/glue4:latest steps: - name: Checkout repository - uses: actions/checkout@v3 + uses: actions/checkout@v4 - name: Install dependencies run: | python3 -m pip install --upgrade pip pip3 install -r requirements.txt + - name: Download & Install awsglue whl + run: | + pip3 install ./assets/aws_glue_libs-4.0.0-py3-none-any.whl + - name: Type check run: mypy ./ --ignore-missing-imports diff --git a/assets/aws_glue_libs-4.0.0-py3-none-any.whl b/assets/aws_glue_libs-4.0.0-py3-none-any.whl new file mode 100644 index 0000000000000000000000000000000000000000..34981ae017521021d29d444306571fd857f874ad GIT binary patch literal 67255 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 RQ5qGH9AKR)ee?6L{|AlnW10W} literal 0 HcmV?d00001 diff --git a/automation/glue_setup.sh b/automation/glue_setup.sh index 85234ab..0becc5a 100755 --- a/automation/glue_setup.sh +++ b/automation/glue_setup.sh @@ -29,7 +29,7 @@ export SPARK_HOME=$(pwd)/spark # Export Path export PATH=$PATH:$SPARK_HOME/bin:$MAVEN_HOME/bin:$AWS_GLUE_HOME/bin -export PYTHONPATH=$PROJECT_ROOT +export PYTHONPATH=$PROJECT_ROOT:$AWS_GLUE_HOME/PyGlue.zip:$SPARK_HOME/python/lib/py4j-0.10.9-src.zip:$SPARK_HOME/python/ # Download Glue ETL .jar files cd $AWS_GLUE_HOME @@ -39,11 +39,13 @@ mvn install dependency:copy-dependencies cp $AWS_GLUE_HOME/jarsv1/AWSGlue*.jar $SPARK_HOME/jars/ cp $AWS_GLUE_HOME/jarsv1/aws*.jar $SPARK_HOME/jars/ -echo "export AWS_GLUE_HOME=$AWS_GLUE_HOME +echo " +export AWS_GLUE_HOME=$AWS_GLUE_HOME export MAVEN_HOME=$MAVEN_HOME export SPARK_HOME=$SPARK_HOME export PATH=$PATH:$SPARK_HOME/bin:$MAVEN_HOME/bin:$AWS_GLUE_HOME/bin -export PYTHONPATH=$PROJECT_ROOT" >> $SOURCE_FILE +export PYTHONPATH=$PROJECT_ROOT:$AWS_GLUE_HOME/PyGlue.zip:$SPARK_HOME/python/lib/py4j-0.10.9-src.zip:$SPARK_HOME/python/ +" >> $SOURCE_FILE cd $PROJECT_ROOT diff --git a/jobs/demo.py b/jobs/demo.py index 155cc77..80d7fd3 100644 --- a/jobs/demo.py +++ b/jobs/demo.py @@ -2,8 +2,8 @@ from dotenv import load_dotenv import app.environment as env -load_dotenv("../app/.custom_env") # Loading env for databricks -load_dotenv() # Loading env for glue +load_dotenv("../app/.custom_env") # Loading env for databricks +load_dotenv() # Loading env for glue # COMMAND ---------- diff --git a/jobs/main.py b/jobs/main.py index f285804..cc68c01 100644 --- a/jobs/main.py +++ b/jobs/main.py @@ -9,8 +9,8 @@ import app.environment as env import app.spark_wrapper as sw -load_dotenv("../app/.custom_env") # Loading env for databricks -load_dotenv() # Loading env for glue +load_dotenv("../app/.custom_env") # Loading env for databricks +load_dotenv() # Loading env for glue # COMMAND ---------- diff --git a/requirements.txt b/requirements.txt index 873b34e..82c70b6 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,6 +1,7 @@ mypy -pylint +pylint==3.0.3 coverage python-dotenv kaggle~=1.5.16 pre-commit +pyspark==3.1.1 diff --git a/tests/test_spark_wrapper_failure.py b/tests/test_spark_wrapper_failure.py index b532251..25613cf 100644 --- a/tests/test_spark_wrapper_failure.py +++ b/tests/test_spark_wrapper_failure.py @@ -29,10 +29,12 @@ def test_value_counts_invalid_column(self): with self.assertRaises(U.AnalysisException) as context: value_counts(self.df, "nonexistent_column") - expected_error_message = re.compile("Column '.+' does not exist") + expected_error_message_1 = re.compile("Column '.+' does not exist") + expected_error_message_2 = re.compile("cannot resolve '.+' given input columns:") actual_error_message = str(context.exception) - self.assertTrue(expected_error_message.search(actual_error_message)) + self.assertTrue(expected_error_message_1.search(actual_error_message) + or expected_error_message_2.search(actual_error_message)) def test_create_frame_invalid_path(self): with self.assertRaises(U.AnalysisException) as context: @@ -48,19 +50,23 @@ def test_make_window_invalid_window_spec(self): window_spec = make_window("invalid_column", "date", -20, -1) self.df.withColumn("literal_1", F.lit(1).over(window_spec)) - expected_error_message = re.compile("Column '.+' does not exist") + expected_error_message_1 = re.compile("Column '.+' does not exist") + expected_error_message_2 = re.compile("cannot resolve '.+' given input columns:") actual_error_message = str(context.exception) - self.assertTrue(expected_error_message.search(actual_error_message)) + self.assertTrue(expected_error_message_1.search(actual_error_message) + or expected_error_message_2.search(actual_error_message)) def test_make_window_invalid_range(self): with self.assertRaises(U.AnalysisException) as context: window_spec = make_window("market", "date", 5, 2) self.df.withColumn("literal_1", F.lit(1).over(window_spec)) - expected_error_message = "The lower bound of a window frame must be less than or equal to the upper bound" + expected_error_message_1 = "The lower bound of a window frame must be less than or equal to the upper bound" + exoected_error_message_2 = re.compile("The data type of the lower bound '.+' does not match the expected data type '.+'") actual_error_message = str(context.exception) - self.assertTrue(expected_error_message in actual_error_message) + self.assertTrue(expected_error_message_1 in actual_error_message + or exoected_error_message_2.search(actual_error_message)) def test_rename_column_invalid_column(self): with self.assertRaises(ValueError) as context: