The Spark engine and the Data Integration Service process overflow values differently. The Spark engine processing rules might differ from the rules that the Data Integration Service uses. As a result, mapping results can vary between the native and Hadoop environment when the Spark engine processes an overflow.
Consider the following processing variation for Spark:
If an expression results in numerical errors, such as division by zero or SQRT of a negative number, the Spark engine returns NULL. In the native environment, the same expression results in a row error.
The Spark engine and the Data Integration Service process data type conversions differently. As a result, mapping results can vary between the native and Hadoop environment when the Spark engine performs a data type conversion. Consider the following processing variations for Spark:
The results of arithmetic operations on floating point types, such as Decimal, can vary between the native environment and a Hadoop environment. The difference between the results can increase across multiple operations.
When you use the TO_DECIMAL or TO_DECIMAL38 function in a mapping that runs in high-precision mode, you must specify a scale argument. If the mapping runs in low-precision mode, the Spark engine ignores the scale argument and returns a double.
When the number of fractional digits in a double or decimal value exceeds the scale that is configured in a decimal port, the Spark engine trims trailing digits, rounding the value if necessary.
If you use Hive 2.0 or higher, the Spark engine guarantees scale values. For example, when the Spark engine processes the decimal
with scale 9 using Hive 2.0, the output is
The Spark engine cannot process dates to the nanosecond. It can return a precision for date/time data up to the microsecond.
If data overflow occurs, the Spark engine returns NULL. For example, if you use the expression
in a port that has a precision of 3 and a scale of 2, the return value is NULL. The NULL value will be propagated through the mapping. The mapping might overwrite it using a default value, detect it using the function IS_NULL, and write the NULL value to the target.
If you enable high-precision in a streaming mapping, the Spark engine runs the mapping in low-precision mode.
If the mapping contains a complex port with an element of a decimal data type, the Spark engine runs the mapping in low-precision mode.
The Hadoop environment treats "/n" values as null values. If an aggregate function contains empty or NULL values, the Hadoop environment includes these values while performing an aggregate calculation.
Mapping validation fails if you configure SYSTIMESTAMP with a variable value, such as a port name. The function can either include no argument or the precision to which you want to retrieve the timestamp value.
Mapping validation fails if an output port contains a Timestamp with Time Zone data type.
Avoid including single and nested functions in an Aggregator transformation. The Data Integration Service fails the mapping in the native environment. It can push the processing to the Hadoop environment, but you might get unexpected results. Informatica recommends creating multiple transformations to perform the aggregation.
You cannot preview data for a transformation that is configured for windowing.
The Spark METAPHONE function uses phonetic encoders from the
library. When the Spark engine runs a mapping, the METAPHONE function can produce an output that is different from the output in the native environment. The following table shows some examples:
Data Integration Service
If you use the TO_DATE function on the Spark engine to process a string written in ISO standard format, you must add
to the date string and
to the format string. The following expression shows an example that uses the TO_DATE function to convert a string written in the ISO standard format YYYY-MM-DDTHH24:MI:SS:
The following table shows how the function converts the string:
The UUID4 function is supported only when used as an argument in UUID_UNPARSE or ENC_BASE64.
The UUID_UNPARSE function is supported only when the argument is UUID4( ).