Как Spark обрабатывает несколько зависимых XSD и преобразовывает их в один окончательный XML - PullRequest
0 голосов
/ 05 февраля 2019

У меня 2 xml файл 1 содержит данные, а другой содержит схему данных.Я хочу прочитать файл данных и поместить значение в файл схемы.

Это мой файл данных

<?xml version="1.0"?>
<ROWSET>
 <ROW>
  <CLTCORP>001</CLTCORP>
  <CTLITEM>1010008</CTLITEM>
  <CTLDIV>17 </CTLDIV>
  <CTLFAC>DDPH</CTLFAC>
  <CORP>001</CORP>
  <DIVISION>17</DIVISION>
  <FACILITY>DDPH</FACILITY>
  <CORP_ITEM_CD>1010008</CORP_ITEM_CD>
  <DST_CNTR>DDPH</DST_CNTR>
  <PROD_CLASS>1010</PROD_CLASS>
  <DEPT>   </DEPT>
 </ROW>
</ROWSET>

Я читаю вышеупомянутый файл данных с использованием XML Reader

val supplyData="XMLData/DataInput.xml"
    val booksFileTag1 = "ROWSET"   

    val df1 = (new XmlReader()).withRowTag(booksFileTag1).xmlFile(sqlContext, supplyData).toDF()
    df1.registerTempTable("SupplyData")

    val  corpDF  = sqlContext.sql("""select * from SupplyData """)

И это моя XML-схема

<?xml version="1.0" encoding="UTF-8"?>
<!--Sample XML file generated by XMLSpy v2014 rel. 2 sp1 (x64) (http://www.altova.com)-->
<ItemMaster xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="ItemMaster.xsd">
    <DocumentData>
        <Document ReleaseId="String" VersionId="String" SystemEnvironmentCd="String">
            <DocumentID >0</DocumentID>
            <AlternateDocumentID >String</AlternateDocumentID>
            <InboundOutboundInd >String</InboundOutboundInd>
            <DocumentNm >PurchaseOrder</DocumentNm>
            <CreationDt >2001-12-17T09:30:47Z</CreationDt>
            <Description  Type=""/>
            <SourceApplicationCd >String</SourceApplicationCd>
            <TargetApplicationCd >String</TargetApplicationCd>
            <Note  Type=""/>
            <GatewayNm >String</GatewayNm>
            <SenderId  QualifierCd="String">String</SenderId>
            <ReceiverId  QualifierCd="String">String</ReceiverId>
            <RoutingSystemNm >String</RoutingSystemNm>
            <InternalFileTransferInd >String</InternalFileTransferInd>
            <InterchangeDate >1957-08-13</InterchangeDate>
            <InterchangeTime >09:30:47+05:00</InterchangeTime>
            <ExternalTargetInd >a</ExternalTargetInd>
            <DataClassification >
                <DataClassificationLevel>
                    <Code>normalizedString</Code>
                    <Description>a</Description>
                </DataClassificationLevel>
                <BusinessSensitivityLevel>
                    <Code>normalizedString</Code>
                    <Description>a</Description>
                </BusinessSensitivityLevel>
                <PHIdataInd>a</PHIdataInd>
                <PCIdataInd>a</PCIdataInd>
                <PPIdataInd>a</PPIdataInd>
            </DataClassification>
        </Document>
        <DocumentAction>
            <ActionTypeCd >String</ActionTypeCd>
            <RecordTypeCd >String</RecordTypeCd>
        </DocumentAction>
    </DocumentData>
    <ChainItem>
        <CorporationId ></CorporationId>
        <DivisionId ></DivisionId>
        <DistributionCenterId ></DistributionCenterId>
        <WarehouseId ></WarehouseId>
        <CorporateItemCd ></CorporateItemCd>
        <DepartmentId ></DepartmentId>

    </ChainItem>
</ItemMaster>

Я снова читаю это с помощью XML Reader

val suppySchema="DataSet/SupplySchema.xml"
    val booksFileTag = "ItemMaster"


    val df = (new XmlReader()).withRowTag(booksFileTag).xmlFile(sqlContext, suppySchema).toDF()
    df.registerTempTable("SupplySchema")

    val CorporationIdDF = sqlContext.sql("""select *from SupplySchema """)

Теперь моя цель - прочитать значение ROWSET.ROW.CORP из файла XML данных.и обновите это поле в теге ChainItem.CorporationId в XML-файле схемы.Может ли кто-нибудь помочь мне с этим.

...