我对AWS Glue的澄清有以下2点,请您澄清一下。因为我需要在项目中使用胶水。
我想将一个csv / txt文件加载到Glue作业中进行处理(就像我们在spark数据帧中所做的那样)。胶水有可能吗?还是只使用抓取工具将数据抓取到Glue表中,并像下面那样使用它们进行进一步处理?
empdf =胶水上下文.create_dynamic_frame.from_catalog( database =“ emp”, table_name =“ emp_json”)
在以下情况下,我使用了spark代码将文件加载到Glue中,但是错误日志越来越长。我们可以直接运行Spark或PySpark代码而不改变Glue吗?
导入系统 从pyspark.context导入SparkContext 从awsglue.context导入GlueContext
sc = SparkContext() gumContext = GlueContext(sc) 火花=胶水Context.spark_session 职位=职位(glueContext) job.init(args ['JOB_NAME'],args) dfnew = spark.read.option(“ header”,“ true”)。option(“ delimiter”,“,”)。csv(“ C:\ inputs \ TEST.txt”) dfnew.show(2)
谢谢。
答案 0 :(得分:0)
可以使用Glue从s3直接加载数据:
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <net/if.h>
int fd = 0; //socket file descriptor
struct sockaddr_in6 server;
/* ipv6 address to in6_addr structure */
const char *ip6str = "fe80::8fad:d1a:c8d0:b76f";
struct in6_addr ravenipv6;
if (inet_pton(AF_INET6, ip6str, &ravenipv6) == 1) // successful
{
printf("%s \n", "ipv6 address ...");
}
/* Create an empty IPv6 socket interface specification */
memset(&server, 0, sizeof(server));
server.sin6_family = AF_INET6;
server.sin6_flowinfo = 0;
server.sin6_port = htons(1234); // port
server.sin6_addr = ravenipv6; <- here the address converted with inet_ptons is inserted
server.sin6_scope_id = if_nametoindex("tun0"); // if your border router is on tun0
/*create socket*/
if ((fd = socket(AF_INET6, SOCK_DGRAM, IPPROTO_UDP)) == -1)
{
printf("%s \n", "failed to create socket");
}
/*bind to socket*/
if(bind(fd, (struct sockaddr_in6*)&server, sizeof(server)) == -1)
{
printf("%s \n", "no binding ! ");
}
您也可以仅使用spark来完成此操作(如您已经尝试过的那样):
sourceDyf = glue_context.create_dynamic_frame_from_options(
connection_type="s3",
format="csv",
connection_options={
"paths" -> ["s3://bucket/folder"]
},
format_options={
"header", "true",
"delimiter", ","
})
但是,在这种情况下,Glue不保证它们提供适当的Spark读取器。因此,如果您的错误与缺少CSV数据源有关,则应通过spark-csv参数提供s3路径到其位置,从而向{Glue作业中添加--extra-jars lib。
答案 1 :(得分:-1)
以下2例我测试正常:
dfnew = glueContext.create_dynamic_frame_from_options("s3", {'paths': ["s3://MyBucket/path/"] }, format="csv" )
dfnew.show(2)
DynFr = glueContext.create_dynamic_frame.from_catalog(database="test_db", table_name="test_table")
df1 = DynFr.toDF()