![aws lambda](https://i-blog.csdnimg.cn/blog_migrate/e11fffa520dad0e5e92dd3981c766a74.png)
aws lambda
1.概述
尝试运行与DB2 11实例通信的AWS Glue作业时,我收到此错误:
Exception in thread "main" java.lang.IllegalArgumentException: Can not create a Path from an empty string
众所周知,AWS Glue是一种完全托管的ETL服务,基于Apache Spark环境构建。 这样,可以使用Scala或Python(pyspark)编写AWS Glue作业。
我的Glue工作是用Python编写的,这个错误似乎并没有告诉我很多。 我想知道哪里有空字符串?
我在线搜索,发现很多不适用于我的结果,例如apache.org上的结果,解决方法是:“我将Spark版本从2.2.0降级到2.1.1,并通过错误解决了” 。因此带有spark2.2.0的phoenix 4.11 -hbase1.20不起作用,兼容性不好。”
目前,我对AWS Glue的知识有限。 但是,由于它是一项托管服务,因此我认为它不适用。
幸运的是,我确实设法解决了这个问题。
2.解决方案
这是我为解决Glue作业中无法从空字符串错误创建路径而采取的步骤:
- 确保可以使用DBeaver之类的软件连接到数据库。 检查架构。
- 从Glue作业中删除所有未创建与DB2数据库的连接的代码,然后运行一个简单的命令。 就我而言,该命令是df.printSchema()
- 删除数据库的连接字符串信息,然后再次输入。 仔细检查它是否100%正确。
- 创建一个新的Glue作业,然后仔细检查AWS中的IAM权限。
- 确保驱动程序在作业创建的“安全配置,脚本库和作业参数(可选)”部分中可用。
- 确保作业创建/编辑作业的“必需的连接”中的连接可用。
3.测试数据库的简单代码示例
正如我所说,我选择测试尽可能少的代码来确保数据库连接。 如果出现此错误,则可能是您的表存在数据库连接问题或查询问题。
这是我最终用于测试的代码:
import sys
import boto3
import json
from awsglue.transforms import *
from awsglue.utils import getResolvedOptions
from pyspark.context import SparkContext
from awsglue.context import GlueContext
from awsglue.dynamicframe import DynamicFrame
from awsglue.job import Job
from pyspark.sql.functions import *
from pyspark.sql.functions import col, asc
args = getResolvedOptions(sys.argv, [ 'JOB_NAME' ])
sc = SparkContext()
glueContext = GlueContext(sc)
spark = glueContext.spark_session
job = Job(glueContext)
job.init(args[ 'JOB_NAME' ], args)
db_username = "username"
db_password = "password!"
db_url = "jdbc:db2://12.345.67.891:50000/somedatabase"
table_name = "database.sometable"
jdbc_driver_name = "com.ibm.db2.jcc.DB2Driver"
df = glueContext. read . format ( "jdbc" ).option( "driver" , jdbc_driver_name).option( "url" , db_url).option( "dbtable" ,
table_name).option(
"user" , db_username).option( "password" , db_password).load() , db_username).option( , db_password).load()
db2_schema = df .printSchema()
当然,有不必要的进口。 如果您根据需要更改此代码,则可以使用。
4。结论
如果您在AWS Glue上收到此神秘错误:
Exception in thread "main" java.lang.IllegalArgumentException: Can not create a Path from an empty string
您可以放心地将问题隔离到数据库问题。 检查我上面提到的步骤,并有条不紊地进行。 我相信您将能够确切地了解其原因。
翻译自: https://www.javacodegeeks.com/2020/09/aws-glue-can-not-create-a-path-from-an-empty-string.html
aws lambda