我有XML源代码,我正在尝试使用Glue进行编目:
<?xml version="1.0"?>
<catalog>
<book id="bk101">
<title>XML Developer's Guide</title>
<genre>Computer</genre>
<price>44.95</price>
<publish_date>2000-10-01</publish_date>
<description>An in-depth look at creating applications with XML.</description>
<authors>
<author>
<name>Gambardella, Matthew</name>
</author>
</authors>
</book>
...
书籍条目正好被选中,但如何配置我的抓取工具/分类器来识别<authors>
下的嵌套?
答案 0 :(得分:0)
除非您希望它仅捕获该行标记,否则您不需要指定分类器。那么你只想将分类器设置为author。但是,您将无法获得其余数据。
如果您使用爬虫来推断数据的架构。它将捕获作者作为结构类型的内容。见下图:
现在您可以在粘贴作业中映射字段:
或者只是在作业代码中访问字段本身,如下所示:
答案 1 :(得分:0)
我们在将嵌套的XML数据加载到DynamicFrame
时遇到了很多麻烦。问题是您不能使用标准Spark(在我们的情况下为PySpark)XPATH
Hive DDL语句来加载DataFrame
(在AWS GLUE的情况下为DynamicFrame
)。
我们的解决方案是仅使用表格属性中的天真且仅DynamicFrame
参数加载RowTag
(不在 Serde参数中作为抓取工具)建议)。这将为您提供一个dynamicRecord['MySingleParsedField']
,然后您可以在其中一个Spark(GLUE)作业中进行迭代以填充新字段。这里有一个这样的迭代代码的工作示例:
def Map_Inital_Fields(dynamicRecord):
nested = []
for item in dynamicRecord['MySingleParsedField']:
nested.append(item)
dynamicRecord['title'] = [item.get('title') for item in nested[0].get('book')][0]
dynamicRecord['price'] = [item.get('price') for item in nested[0].get('book')][0]
del dynamicRecord['MySingleParsedField']
return dynamicRecord
mapfields01 = Map.apply(frame = selectfields2, f = Map_Inital_Fields, transformation_ctx = "mapfields01")
这只是一个例子,但基本上,一旦你将xml解析对象作为DynamicFrame
中的一个字段,你就可以把它想象成一个Python对象(一个dic),然后根据需要进行修改。