# tHMapInput properties for Apache Spark Batch

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

The Spark Batch tHMapInput component belongs to the Processing family.

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

## Basic settings

| 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 for the tHDFSConfiguration 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 | Before you configure this component, you must have already<br>added a downstream component and linked it to the tHMapInput component, and retreived the<br>schema from the downstream component.<br><br>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 structure</span> field and                                        then, in the <span>Select a                                            Structure</span> dialog box that opens, select the                                        map you want to use and then click <span>OK</span>.</p> <p>This structure must have been previously                                        created in <em> <span>Talend Data Mapper</span> </em>.</p> </li> <li> <p>Select the <span>Input                                            Representation</span> to use from the drop-down                                        list.</p> <p>Supported input formats are Avro, COBOL, EDI,                                        Flat, IDocs, JSON and XML.</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> <p>Select an appropriate record                                                delimiter for your data. Note that you must specify                                                this value without quotes. </p> <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.</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> <p>Select the <span>Regular                                                  Expression</span> check box if you to wish to                                                  enter a regular expression to match the start of a                                                  record. When you select XML or JSON, this check                                                  box is selected by default and a pre-configured                                                  regular expression is provided.</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> <li> <p>Click <span>Finish</span>.</p> </li> </ul> </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> <li> <p>Map the elements from the input structure to                                        the output structure in the new map that opens, and then                                        press <span>Ctrl+S</span> to save                                        your map.</p> <p>For more information on creating maps, see <em> <span>Talend Data Mapper</span> User Guide</em>.</p> </li> </ol> |
| Input | Click the [...]<br>button to define the path to where the input file is stored. |
| Open Map Editor | Click the [...]<br>button to open the map for editing in the Map<br>Editor of *Talend Data Mapper*.<br><br>For more information, see *Talend Data Mapper User Guide*. |
| **Die on error** | This check box is selected by default.<br><br>Clear the check box to skip any rows on error and complete the<br>process for error-free rows.<br><br><br>If you opt to clear the<br>check box, you can perform any of these options:<br><br><ul> <li> <div>Connect the tHMapInput component to an output                                    component, for example tAvroOutput, using a <span><span>Row</span> &gt; <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>You can retrieve the rejected records in a file.                                    One of these mechanisms triggers this feature: (1) a context                                    variable (<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. |

## Usage

| Usage rule | This component is used with a tHDFSConfiguration component which defines the<br>connection to the HDFS storage.<br><br>It is an input component and requires an output flow. |
| --- | --- |
| 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/7.3/data-mapper-user-guide/using-talend-data-mapper-with-talend-runtime). |