【发布时间】:2019-09-24 13:40:11
【问题描述】:
所以我使用 AWS Glue 自动生成的代码从 S3 读取 csv 文件并通过 JDBC 连接将其写入表中。看起来很简单,Job 运行成功,没有错误,但它什么也没写。当我检查 Glue Spark 动态框架时,它确实包含所有行(使用 .count())。但是什么时候对它执行 .show() 不会产生任何结果。
.printSchema() 工作正常。尝试在使用 .show() 时记录错误,但没有错误或没有打印任何内容。使用 .toDF 及其有效的 show 方法将 DynamicFrame 转换为数据框。 我认为文件有问题,试图缩小到某些列。但即使文件中只有 2 列也是一样的。双引号中明确标记的字符串,仍然没有成功。
我们有一些需要从 Glue 配置中挑选的东西,例如 JDBC 连接。我猜常规的火花数据框做不到。因此需要动态框架工作。
import sys
from awsglue.transforms import *
from awsglue.utils import getResolvedOptions
from pyspark.context import SparkContext
from awsglue.context import GlueContext
from awsglue.job import Job
from awsglue.dynamicframe import DynamicFrame
import logging
logger = logging.getLogger()
logger.setLevel(logging.DEBUG)
glueContext = GlueContext(SparkContext.getOrCreate())
spark = glueContext.spark_session
datasource0 = glueContext.create_dynamic_frame.from_options('s3', {'paths': ['s3://bucket/file.csv']}, 'csv', format_options={'withHeader': True,'skipFirst': True,'quoteChar':'"','escaper':'\\'})
datasource0.printSchema()
datasource0.show(5)
输出
root
|-- ORDERID: string
|-- EVENTTIMEUTC: string
这是转换为常规数据帧的结果。
datasource0.toDF().show()
输出
+-------+-----------------+
|ORDERID| EVENTTIMEUTC|
+-------+-----------------+
| 2| "1/13/2018 7:50"|
| 3| "1/13/2018 7:50"|
| 4| "1/13/2018 7:50"|
| 5| "1/13/2018 7:50"|
| 6| "1/13/2018 8:52"|
| 7| "1/13/2018 8:52"|
| 8| "1/13/2018 8:53"|
| 9| "1/13/2018 8:53"|
| 10| "1/16/2018 1:33"|
| 11| "1/16/2018 2:28"|
| 12| "1/16/2018 2:37"|
| 13| "1/17/2018 1:17"|
| 14| "1/17/2018 2:23"|
| 15| "1/17/2018 4:33"|
| 16| "1/17/2018 6:28"|
| 17| "1/17/2018 6:28"|
| 18| "1/17/2018 6:36"|
| 19| "1/17/2018 6:38"|
| 20| "1/17/2018 7:26"|
| 21| "1/17/2018 7:28"|
+-------+-----------------+
only showing top 20 rows
这是一些数据。
ORDERID, EVENTTIMEUTC
1, "1/13/2018 7:10"
2, "1/13/2018 7:50"
3, "1/13/2018 7:50"
4, "1/13/2018 7:50"
5, "1/13/2018 7:50"
6, "1/13/2018 8:52"
7, "1/13/2018 8:52"
8, "1/13/2018 8:53"
9, "1/13/2018 8:53"
10, "1/16/2018 1:33"
11, "1/16/2018 2:28"
12, "1/16/2018 2:37"
13, "1/17/2018 1:17"
14, "1/17/2018 2:23"
15, "1/17/2018 4:33"
16, "1/17/2018 6:28"
17, "1/17/2018 6:28"
18, "1/17/2018 6:36"
19, "1/17/2018 6:38"
20, "1/17/2018 7:26"
21, "1/17/2018 7:28"
22, "1/17/2018 7:29"
23, "1/17/2018 7:46"
24, "1/17/2018 7:51"
25, "1/18/2018 2:22"
26, "1/18/2018 5:48"
27, "1/18/2018 5:50"
28, "1/18/2018 5:50"
29, "1/18/2018 5:51"
30, "1/18/2018 5:53"
100, "1/18/2018 10:32"
101, "1/18/2018 10:33"
102, "1/18/2018 10:33"
103, "1/18/2018 10:42"
104, "1/18/2018 10:59"
105, "1/18/2018 11:16"
【问题讨论】:
-
我遇到了完全相同的问题。 dynamicFrame.show() 没有打印任何东西。 PrintSchema() 有效,如果我转换为 spark 数据框,则 show() 有效。我不知道为什么会这样。在我的特殊情况下,当我读入一个用 gzip 压缩的 json 文件时,就会发生这种情况。未压缩的 json 文件不会发生这种情况。当我尝试使用 write_dynamic_frame.from_options 将动态帧写入 S3 时,我收到以下错误 org.apache.spark.SparkException: Job aborted due to stage failure: Task 0 in stage 24.0 failed 4 次,大多数最近失败:在 24.0 阶段丢失任务 0.3
标签: python pyspark apache-spark-sql