# tHMapFile

Information noteNote: This component is not shipped with your Talend Studio by default. To use it, you need to install the Data Mapper &gt; Talend Data Mapper for Spark feature using the Feature Manager. For more information, see [Installing features using the Feature Manager](https://help.qlik.com/talend/r/en-US/8.0/studio-user-guide/install-features-to-talend-studio).

Runs a Talend Data Mapper map where input and output structures may differ, as a Spark batch execution.

tHMapFile transforms data from a single source, in a Spark environment.

## tHMapFile properties for Apache Spark Batch

These properties are used to configure tHMapFile running in the Spark Batch Job framework.

The Spark Batch tHMapFile component belongs to the Processing family.

This component is available in Talend Platform products with Big Data and in Talend Data Fabric.

## Basic settings

| Properties | Description |
| --- | --- |
| Storage | To connect to an HDFS installation, select the Define a storage configuration component<br>check box and then select the name of the component to use from those<br>available in the drop-down list.<br><br>This option requires you to have previously configured the<br>connection to the HDFS installation to be used, as described in the<br>*documentation*<br>for the tHDFSConfiguration<br>component.<br><br>If you leave the Define a<br>storage configuration component check box unselected,<br>you can only convert files locally. |
| Configure Component | To configure the component, click the [...] button and, in the Component Configuration window, perform<br>the following actions.<br><br><ol> <li> <p>Click the <span>Select</span> button next to the <span>Record Map</span> field and then, in                                    the <span>Select a Map</span> dialog box                                    that opens, select the map you want to use and then click                                        <span>OK</span>.</p> <p>This map must have been previously created in <em> <span>Talend Data Mapper</span> </em>.</p> <p>Note that the input and output representations                                    are those defined in the map, and cannot be changed in the                                    component.</p> </li> <li> <p>Click <span>Next</span>.</p> </li> <li> <p>Tell the component where each new record begins.                                    In order for you to be able to do so, you need to fully                                    understand the structure of your data.</p> <p>Exactly how you do this varies depending on the                                    input representation being used, and you will be presented with                                    one of the following options.</p> <ol> <li> <div>Select an appropriate                                            record delimiter for your data. Note that you must                                            specify this value without quotes. <ul> <li> <p> <span>Separator</span> lets you specify a                                                  separator indicator, such as <em>\n</em>, to identify a new                                                  line.</p> <p>Supported                                                  indicators are <em>\n</em> for a Unix-type new line, <em>\r\n</em> for                                                  Windows and <em>\r</em> for Mac, and <em>\t</em> for tab characters.</p> </li> <li> <p> <span>Start/End with</span> lets you specify the                                                  initial characters that indicate a new record,                                                  such as <em>&lt;root</em>, or the characters that indicate                                                  where a record ends. This can also be a regular                                                  expression.</p> <p> <span>Start                                                  with</span> also supports new lines, <em>\n</em> for a                                                  Unix-type new line, <em>\r\n</em> for Windows and <em>\r</em> for Mac,                                                  and <em>\t</em> for                                                  tab characters.</p> </li> <li> <span>Sample                                                  File</span>: To test the signature with a                                                  sample file, click the <span>[...]</span> button, browse to the file you                                                  want to use as a sample, click <span>Open</span>, and then click                                                  <span>Run</span> to test                                                  your sample.<p>Testing the                                                  signature lets you check that the total number of                                                  records and their minimum and maximum length                                                  corresponds to what you expect based on your                                                  knowledge of the data. This step assumes you have                                                  a local subset of your data to use as a                                                  sample.</p> </li> </ul> <ul> <li> <p>Click <span>Finish</span>.</p> </li> </ul> </div> </li> <li> <div>If your input representation is COBOL or                                            Flat with positional and/or binary encoding properties,                                            define the signature for the input record structure:<ul> <li> <span>Input Record root</span>                                                  corresponds to the root element in your input                                                  record.</li> <li> <p> <span>Minimum Record                                                  Size</span> corresponds to the size in bytes                                                  of the smallest record. If you set this value too                                                  low, you may encounter performance issues, since                                                  the component will perform more checks than                                                  necessary when looking for a new record.</p> </li> <li> <p> <span>Maximum Record                                                  Size</span> corresponds to the size in bytes                                                  of the largest record, and is used to determine                                                  how much memory is allocated to read the                                                  input.</p> </li> <li> <span>Sample from Workspace</span> or                                                  <span>Sample from File System</span>: To                                                  test the signature with a sample file, click the                                                  <span>[...]</span>                                                  button, and then browse to the file you want to                                                  use as a sample.<p>Testing the signature lets you                                                  check that the total number of records and their                                                  minimum and maximum length corresponds to what you                                                  expect based on your knowledge of the data. This                                                  step assumes you have a local subset of your data                                                  to use as a sample.</p> </li> <li> <p> <span>Footer Size</span>                                                  corresponds to the size in bytes of the footer, if                                                  any. At runtime, the footer will be ignored rather                                                  than being mistakenly included in the last record.                                                  Leave this field empty if there is no footer.</p> </li> <li> <p>Click the <span>Next</span> button to open                                                  the <span>Signature                                                  Parameters</span> window, select the fields                                                  that define the signature of your record input                                                  structure (that is, to identify where a new record                                                  begins), update the <span>Operation</span> and <span>Value</span> columns as                                                  appropriate, and then click <span>Next</span>.</p> </li> <li> <p>In the <span>Record                                                  Signature Test</span> window that opens, check                                                  that your Records are correctly delineated by                                                  scrolling through them with the                                                  <span>Back</span> and                                                  <span>Next</span> buttons and performing                                                  a visual check, and then click                                                  <span>Finish</span>.</p> </li> </ul> </div> </li> </ol> </li> </ol> |
| Input | Click the [...]<br>button to define the path to where the input file is stored. |
| Output | Click the [...]<br>button to define the path to where the output files will be stored. |
| Action | From the drop-down list, select:<br><br><ul> <li> <p> <span>Create</span> if you want                                        the mapping process to create a new file.</p> </li> <li> <p> <span>Overwrite</span> if you want                                        the mapping process to overwrite an existing file.</p> </li> </ul> |
| Open Map Editor | Click the [...] button<br>to open the Structure Generate/Select<br>wizard.<br><br>You can first select the type of map to create:<br><br><ul> <li><span>Standard Map</span>: Map that perform mappings using                                functions based on xQuery</li> <li><span>DSQL Map</span>: Map that performs mappings using                                    <span>Data Shaping Query Language</span>.</li> </ul><br><br><br>You can select the Don't ask me again check box<br>to save this preference. For more information about these map types, see<br>[Working with maps](https://help.qlik.com/talend/r/en-US/8.0/data-mapper-user-guide/working-with-maps).<br><br>Information noteNote: This option is available only if you have installed the<br>R2023-10 Studio monthly update or a later one delivered by Talend. For more information, check with your administrator.<br><br>Then you can either have the hierarchical mapper structure generated<br>automatically based on the schema, or select an existing hierarchical mapper<br>structure. You must do this for both the input and output sides of your Map.<br>The following lists the options for the output structure:<br><br><ul> <li> <span>Generate hierarchical mapper structure based on the                                    schema</span> option: When you connect multiple output                                connections to the tHMap, the page displays a confirmation message                                that informs you that the mapper structures are generated based on                                the output connections.</li> <li> <span>Select an existing hierarchical mapper                                    structure</span> option: You can connect multiple outputs                                that are payload-based connections to the tHMap. If there is a                                single payload-type connection, you can select the <span>Allow                                    support for multiple output connections</span> check box.                                The generated output map inherits from the existing payload                                structure.</li> </ul><br><br>If Talend Studio detects multiple output connections available, the window displays both<br>output structure options without the support for multiple output connections<br>check boxes.<br><br>If neither input nor output connection exists, the Structure Selection page<br>is displayed. |
| **Die on error** | This check box is selected by default.<br><br>Clear the checkbox to skip any rows on error and complete the<br>process for error-free rows.<br><br>If you opt to clear the check box, you can perform any of these options:<br><br><ul> <li> <div> <span><span>Row</span><abbr> &gt; </abbr><span> Rejects</span></span>connection. In the output component, ensure                                    that you add a fixed metadata with the following columns:<ul> <li>inputRecord: contains the rejected                                            input record during the transformation.</li> <li>recordId: refers to the record                                            identifier. For a text or binary input, the recordId                                            specifies the start offset of the record in the                                            input file. For an AVRO input, the recordId                                            specifies the timestamp when the input was                                            processed.</li> <li>errorMessage: contains the                                            transformation status with details of the cause of                                            the transformation error.</li> </ul> </div> </li> <li> <p>If the check box is unselected, you can retrieve the rejected                                    records in a file. One of these mechanisms triggers this                                    feature: (1) a context variable                                    (Connect the tHMapFile component to an output                                    component, for example tAvroOutput, using a <span>talend_transform_reject_file_path</span>)                                    and (2) a system variable set in the Advanced Job parameters                                    (<span>spark.hadoop.talend.transform.reject.file.path</span>).</p> <p>When you set the file path on the Hadoop Distributed File                                    System (HDFS), no further configurations are needed. When                                    you set the file on Amazon S3 or any other Hadoop-compatible                                    file systems, add the associated Spark advanced                                    configuration parameter.</p> <p>In case of errors at runtime, <span>tHMapFile</span> checks if one of                                        the mechanisms exists and, if so, appends the rejected                                        record to the designated file. The reject file content                                        includes the concatenation of the rejected records without                                        any additional metadata.</p> <p>If the file system you use does not support                                        appending to a file, a separate file is created for each                                        rejection. The file uses the provided file path as the                                        prefix and adds a suffix that is the offset of the input                                        file and the size of the rejected record.</p> </li> </ul><br><br>Information noteNote: Any errors while trying to store the reject are logged and the<br>processing continues. |
| Merge result to single<br>file | By default, the tHMapFile creates several part files. Select this check<br>box to merge these files into a single file.<br><br>The following options are used to manage the source and<br>the target files:<br><br><ul> <li> <span>Merge File                            Path</span>: enter the path to the file which will                            contain the merged content from all parts.</li> <li> <span>Remove source                                        dir</span>: select this check box to remove the source                                    files after the merge.                            </li> <li> <span>Override target file</span>: select                                    this check box to override the file already existing in the                                    target location. This option does not override the folder.                            </li> <li> <span>Include                            Header</span>: select this check box to add the CSV                            header to the beginning of the merged file. This option is only                            used for CSV outputs. For other representations, it has no                            effect on the target file.</li> </ul><br><br>Information noteWarning: Using this option with an Avro output creates an<br>invalid Avro file. Since each part starts with an Avro Schema header,<br>the merged file would have more than one Avro Schema, which is<br>invalid. |

## Advanced settings

| Properties | Description |
| --- | --- |
| Use old Eclipse runtime (deprecated) | Select this check box to include the old Eclipse runtime in<br>your Job.<br><br>Information noteNote: This option is available only if you have<br>installed the R2024-03 Talend Studio<br>monthly update or a later one delivered by Talend.<br>For more information, check with your administrator.<br><br>Information noteNote: From Talend Studio 8.0 R2025-04<br>onwards, the Use old Eclipse runtime (deprecated) parameter<br>has been removed. |

## Usage

| Usage guidance | Description |
| --- | --- |
| Usage rule | This component is used with a tHDFSConfiguration component which defines the connection<br>to the HDFS storage, or as a standalone component for mapping local files<br>only. |
| Usage with Talend Runtime | If you want to deploy a Job or Route containing a data mapping component<br>with Talend Runtime, you first need to install the Talend Data Mapper feature. For more information, see [Using Talend Data Mapper with Talend Runtime](https://help.qlik.com/talend/r/en-US/8.0/data-mapper-user-guide/using-talend-data-mapper-with-talend-runtime). |

**Related concepts**

* [Transforming data in a Spark environment](https://help.qlik.com/talend/en-US/components/8.0/data-mapping/thmapfile-thdfsconfiguration-ts3configuration-ts3configuration-transforming-data-in-spark-environment-spark-batch-component-the)