如何将csv / txt文件加载到AWS Glue作业中

时间:2018-10-20 10:07:47

标签: amazon-web-services pyspark aws-glue

我对AWS Glue的澄清有以下2点,请您澄清一下。因为我需要在项目中使用胶水。

  1. 我想将一个csv / txt文件加载到Glue作业中进行处理(就像我们在spark数据帧中所做的那样)。胶水有可能吗?还是只使用抓取工具将数据抓取到Glue表中,并像下面那样使用它们进行进一步处理?

    empdf =胶水上下文.create_dynamic_frame.from_catalog( database =“ emp”, table_name =“ emp_json”)

  2. 在以下情况下,我使用了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)

谢谢。

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例我测试正常:

要将文件从S3加载到Glue中。

dfnew = glueContext.create_dynamic_frame_from_options("s3", {'paths': ["s3://MyBucket/path/"] }, format="csv" )

dfnew.show(2)

要从已经通过Glue Crawlers生成的Glue数据库和表中加载数据。

DynFr = glueContext.create_dynamic_frame.from_catalog(database="test_db", table_name="test_table")

DynFr是一个DynamicFrame,因此,如果我们想在Glue中使用Spark代码,则需要将其转换为如下所示的普通数据帧。

df1 = DynFr.toDF()