Как загрузить файл csv / txt в работу AWS Glue - PullRequest
0 голосов
/ 20 октября 2018

У меня есть 2 пояснения к клею AWS, не могли бы вы уточнить.Поскольку мне нужно использовать клей как часть моего проекта.

  1. Я хотел бы загрузить файл csv / txt в задание Glue для его обработки.(Как мы делаем в Spark с датафреймами).Возможно ли это в Клее?Или мы должны использовать только сканеры для сканирования данных в таблицах Glue и использовать их, как показано ниже, для дальнейшей обработки?

    empdf = glueContext.create_dynamic_frame.from_catalog(
        database="emp",
        table_name="emp_json")
    
  2. Ниже я использовал Spark-код для загрузки файлав клей, но я получаю длинные журналы ошибок.Можем ли мы напрямую запустить код Spark или PySpark без изменений в Glue?

    import sys
    from pyspark.context import SparkContext
    from awsglue.context import GlueContext
    
    sc = SparkContext()
    glueContext = GlueContext(sc)
    spark = glueContext.spark_session
    job = Job(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 голосов
/ 26 октября 2018

Ниже 2 случаев я протестировал работоспособность:

Чтобы загрузить файл из S3 в Glue.

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

dfnew.show(2)

Чтобы загрузить данные из базы данных Glue и таблиц, которые уже сгенерированы с помощью сканеров клея.

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

DynFr - это DynamicFrame, поэтому, если мы хотим работать с кодом Spark в Glue, нам нужно преобразовать его в обычный фрейм данных, как показано ниже.

df1 = DynFr.toDF()
0 голосов
/ 20 октября 2018

Можно загрузить данные напрямую из s3, используя Glue:

sourceDyf = glue_context.create_dynamic_frame_from_options(
    connection_type="s3",
    format="csv",
    connection_options={
        "paths" -> ["s3://bucket/folder"]
    },
    format_options={
        "header", "true",
        "delimiter", ","
    })

Вы также можете сделать это только с помощью spark (как вы уже пробовали):

sourceDf = spark.read
    .option("header","true")
    .option("delimiter", ",")
    .csv("C:\inputs\TEST.txt") 

Однако вв этом случае клей не гарантирует, что они предоставляют соответствующие читатели Spark.Поэтому, если ваша ошибка связана с отсутствующим источником данных для CSV, вам следует добавить spark-csv lib к заданию Glue, указав путь s3 к его местоположениям с помощью параметра - extra-jars .

...