Mesin Fusion adalah mesin eksekusi SQL vektorisasi berkinerja tinggi yang terintegrasi dalam EMR Serverless Spark. Mesin ini menunjukkan performa tiga kali lebih baik dibandingkan Spark open source dalam pengujian benchmark TPC-DS dan sepenuhnya kompatibel dengannya. Anda tidak perlu mengubah kode yang sudah ada. Di EMR Serverless Spark, Anda dapat mengaktifkan mesin ini dengan mengaktifkan sakelar Use Fusion Acceleration saat membuat sesi.
Skenario yang didukung
Mesin Fusion cocok untuk pekerjaan Spark SQL dan DataFrame serta dapat meningkatkan performa sebagian besar operator, ekspresi, dan tipe data. Namun, Mesin Fusion tidak mendukung akselerasi untuk pekerjaan Resilient Distributed Dataset (RDD) atau pekerjaan yang menggunakan fungsi yang ditentukan pengguna (UDF).
Format penyimpanan
Mesin Fusion mendukung format penyimpanan data berikut:
Parquet
Paimon
ORC (sebagian)
Operator
Mesin Fusion memberikan akselerasi untuk sebagian besar operator umum. Tabel berikut menjelaskan operator tersebut.
Jenis | Daftar Operator |
Sumber |
|
Sink | DataWritingCommandExec |
Operasi umum |
|
Agregasi | HashAggregateExec |
Gabung |
|
Jendela |
|
Pertukaran |
|
Batas |
|
Subquery | SubqueryBroadcastExec |
Lainnya |
|
Ekspresi
Tabel berikut menjelaskan ekspresi yang didukung oleh Mesin Fusion.
Jenis | Daftar Ekspresi |
Perbandingan/Logika | =, ==, !=, <>, <, <=, >, >=, <=>, is null, is not null, between, and, or, ||, !, negative, null if |
Aritmetika | %, +, -, *, /, isnan, mod, negative, not, positive, abs, acos, acosh, asin, asinh, atan, atan2, atanh, cbrt, ceil, ceiling, cos, cosh, degrees, e, exp, floor, ln, log, log10, log2, pi, pmod, pow, power, radians, rand, random, rint, round, shiftleft, shiftright, sign, signum, sin, sqrt, tan, dan tanh |
Bitwise | ^, |, &, ~, bit_and, bit_count, bit_or, bit_xor, dan bit_length |
Ekspresi Kondisional | case, if, dan when |
Set | in dan find_in_set |
Kalkulasi string | ascii, char, chr, char_length, character_length, concat, instr, lcase, lower, length, locate, lower, lpad, dan ltrim overlay, replace, reverse, rtrim, split, split_part, substr, substring, trim, ucase, upper, like, regexp, regexp_extract, regexp_extract_all, regexp_like, regexp_replace, dan rlike |
Agregasi | aggregate, approx_count_distinct, avg, collect_list, collect_set, corr, count, covar_pop, covar_samp, first, first_value, kurtosis, last, last_value, max, max_by, mean, min, regr_avgx, regr_avgy, regr_count, regr_r2 regr_intercept, regr_slope, regr_sxy, regr_sxx, regr_syy, skewness, std, stddev, stddev_pop, stddev_samp, sum, var_pop, var_samp, dan variance |
Jendela | cume_dist, dense_rank, lag, lead, nth_value, ntile, percent_rank, rank, dan row_number |
Waktu | add_months, current_date, current_timestamp, current_timezone, date, date_add, date_format, date_from_unix_date, date_sub, datediff, day, dayofmonth, dayofweek, dayofyear, from_unixtime, from_utc_timestamp, hour, last_day, make_date, minute, month, next_day, now, quarter, second, timestamp_micros, timestamp_millis, to_date, to_unix_timestamp, unix_seconds, unix_millis, unix_micros, weekday, weekofyear, dan year |
JSON | get_json_object dan json_array_length |
Array | array, array_contains, array_distinct, array_except, array_intersect, array_join, array_max, array_min, array_position, array_remove, array_repeat, array_sort, arrays_overlap, arrays_zip, element_at, exists, filter, forall, flatten, shuffle, size, dan sort_array |
Map | map, get_map_value, map_from_arrays, map_keys, map_values, map_zip_with, named_struct, struct, dan str_to_map |
Pengodean | crc32, hash, md5, sha1, dan sha2 |
Lainnya | current_catalog, current_database, greatest, least, monotonically_increasing_id, nanvl, spark_partition_id, stack, uuid, dan rand |
Tipe data
Mesin Fusion mendukung tipe data berikut:
Byte, Short, Int, dan Long
Boolean
String dan Binary
Decimal
Float dan Double
Date dan Timestamp
Skenario yang tidak didukung
Operator
Jenis | Operator |
Agregasi |
|
Pertukaran | CustomShuffleReaderExec |
Pandas |
|
Lainnya |
|
Tipe data
Struct
Array
Map