Pyspark : Replace diacritic characters in dataframe column - pyspark

I am trying to replace all diacritic characters in a pyspark column. I have a list of tuples with the 1st element being the character to replace, and the 2nd element is character to replace it with. This works perfectly if I call one tuple at a time. This is my code that works
def Str_Substitution(data_prep_output):
# Load Data
DATA_INPUT_DF = data_prep_output
# Set up character substitutions, use '?' if character is not in this list
chr_replacements = [
(u'Á', 'A'), (u'Ă', 'A'), (u'Ắ', 'A'), (u'Ặ', 'A'), (u'Ằ', 'A'), (u'Ẳ', 'A'), (u'Ẵ', 'A'), \
(u'Ǎ', 'A'), (u'Â', 'A'), (u'Ấ', 'A'), (u'Ậ', 'A'), (u'Ầ', 'A'), (u'Ẩ', 'A'), (u'Ẫ', 'A'), \
(u'Ä', 'A'), (u'Ǟ', 'A'), (u'Ȧ', 'A'), (u'Ǡ', 'A'), (u'Ạ', 'A'), (u'Ȁ', 'A'), (u'À', 'A'), \
(u'Ả', 'A'), (u'Ȃ', 'A'), (u'Ā', 'A'), (u'Ą', 'A'), (u'Å', 'A'), (u'Ǻ', 'A'), (u'Ḁ', 'A'), \
(u'Ⱥ', 'A'), (u'Ã', 'A'), (u'Ꜳ', 'AA'), (u'Æ', 'AE'), (u'Ǽ', 'AE'), (u'Ǣ', 'AE'), (u'Ꜵ', 'AO'), \
(u'Ꜷ', 'AU'), (u'Ꜹ', 'AV'), (u'Ꜻ', 'AV'), (u'Ꜽ', 'AY'), (u'Ḃ', 'B'), (u'Ḅ', 'B'), (u'Ɓ', 'B'), \
(u'Ḇ', 'B'), (u'Ƀ', 'B'), (u'Ƃ', 'B'), (u'Ć', 'C'), (u'Č', 'C'), (u'Ç', 'C'), (u'Ḉ', 'C'), \
(u'Ĉ', 'C'), (u'Ċ', 'C'), (u'Ƈ', 'C'), (u'Ȼ', 'C'), (u'Ď', 'D'), (u'Ḑ', 'D'), (u'Ḓ', 'D'), \
(u'Ḋ', 'D'), (u'Ḍ', 'D'), (u'Ɗ', 'D'), (u'Ḏ', 'D'), (u'Dz', 'D'), (u'Dž', 'D'), (u'Đ', 'D'), \
(u'Ƌ', 'D'), (u'DZ', 'DZ'), (u'DŽ', 'DZ'), (u'É', 'E'), (u'Ĕ', 'E'), (u'Ě', 'E'), (u'Ȩ', 'E'), \
(u'Ḝ', 'E'), (u'Ê', 'E'), (u'Ế', 'E'), (u'Ệ', 'E'), (u'Ề', 'E'), (u'Ể', 'E'), (u'Ễ', 'E'), \
(u'Ḙ', 'E'), (u'Ë', 'E'), (u'Ė', 'E'), (u'Ẹ', 'E'), (u'Ȅ', 'E'), (u'È', 'E'), (u'Ẻ', 'E'), \
(u'Ȇ', 'E'), (u'Ē', 'E'), (u'Ḗ', 'E'), (u'Ḕ', 'E'), (u'Ę', 'E'), (u'Ɇ', 'E'), (u'Ẽ', 'E'), \
(u'Ḛ', 'E'), (u'Ꝫ', 'ET'), (u'Ḟ', 'F'), (u'Ƒ', 'F'), (u'Ǵ', 'G'), (u'Ğ', 'G'), (u'Ǧ', 'G'), \
(u'Ģ', 'G'), (u'Ĝ', 'G'), (u'Ġ', 'G'), (u'Ɠ', 'G'), (u'Ḡ', 'G'), (u'Ǥ', 'G'), (u'Ḫ', 'H'), \
(u'Ȟ', 'H'), (u'Ḩ', 'H'), (u'Ĥ', 'H'), (u'Ⱨ', 'H'), (u'Ḧ', 'H'), (u'Ḣ', 'H'), (u'Ḥ', 'H'), \
(u'Ħ', 'H'), (u'Í', 'I'), (u'Ĭ', 'I'), (u'Ǐ', 'I'), (u'Î', 'I'), (u'Ï', 'I'), (u'Ḯ', 'I'), \
(u'İ', 'I'), (u'Ị', 'I'), (u'Ȉ', 'I'), (u'Ì', 'I'), (u'Ỉ', 'I'), (u'Ȋ', 'I'), (u'Ī', 'I'), \
(u'Į', 'I'), (u'Ɨ', 'I'), (u'Ĩ', 'I'), (u'Ḭ', 'I'), (u'Ꝺ', 'D'), (u'Ꝼ', 'F'), (u'Ᵹ', 'G'), \
(u'Ꞃ', 'R'), (u'Ꞅ', 'S'), (u'Ꞇ', 'T'), (u'Ꝭ', 'IS'), (u'Ĵ', 'J'), (u'Ɉ', 'J'), (u'Ḱ', 'K'), \
(u'Ǩ', 'K'), (u'Ķ', 'K'), (u'Ⱪ', 'K'), (u'Ꝃ', 'K'), (u'Ḳ', 'K'), (u'Ƙ', 'K'), (u'Ḵ', 'K'), \
(u'Ꝁ', 'K'), (u'Ꝅ', 'K'), (u'Ĺ', 'L'), (u'Ƚ', 'L'), (u'Ľ', 'L'), (u'Ļ', 'L'), (u'Ḽ', 'L'), \
(u'Ḷ', 'L'), (u'Ḹ', 'L'), (u'Ⱡ', 'L'), (u'Ꝉ', 'L'), (u'Ḻ', 'L'), (u'Ŀ', 'L'), (u'Ɫ', 'L'), \
(u'Lj', 'L'), (u'Ł', 'L'), (u'LJ', 'LJ'), (u'Ḿ', 'M'), (u'Ṁ', 'M'), (u'Ṃ', 'M'), (u'Ɱ', 'M'), \
(u'Ń', 'N'), (u'Ň', 'N'), (u'Ņ', 'N'), (u'Ṋ', 'N'), (u'Ṅ', 'N'), (u'Ṇ', 'N'), (u'Ǹ', 'N'), \
(u'Ɲ', 'N'), (u'Ṉ', 'N'), (u'Ƞ', 'N'), (u'Nj', 'N'), (u'Ñ', 'N'), (u'NJ', 'NJ'), (u'Ó', 'O'), \
(u'Ŏ', 'O'), (u'Ǒ', 'O'), (u'Ô', 'O'), (u'Ố', 'O'), (u'Ộ', 'O'), (u'Ồ', 'O'), (u'Ổ', 'O'), \
(u'Ỗ', 'O'), (u'Ö', 'O'), (u'Ȫ', 'O'), (u'Ȯ', 'O'), (u'Ȱ', 'O'), (u'Ọ', 'O'), (u'Ő', 'O'), \
(u'Ȍ', 'O'), (u'Ò', 'O'), (u'Ỏ', 'O'), (u'Ơ', 'O'), (u'Ớ', 'O'), (u'Ợ', 'O'), (u'Ờ', 'O'), \
(u'Ở', 'O'), (u'Ỡ', 'O'), (u'Ȏ', 'O'), (u'Ꝋ', 'O'), (u'Ꝍ', 'O'), (u'Ō', 'O'), (u'Ṓ', 'O'), \
(u'Ṑ', 'O'), (u'Ɵ', 'O'), (u'Ǫ', 'O'), (u'Ǭ', 'O'), (u'Ø', 'O'), (u'Ǿ', 'O'), (u'Õ', 'O'), \
(u'Ṍ', 'O'), (u'Ṏ', 'O'), (u'Ȭ', 'O'), (u'Ƣ', 'OI'), (u'Ꝏ', 'OO'), (u'Ɛ', 'E'), (u'Ɔ', 'O'), \
(u'Ȣ', 'OU'), (u'Ṕ', 'P'), (u'Ṗ', 'P'), (u'Ꝓ', 'P'), (u'Ƥ', 'P'), (u'Ꝕ', 'P'), (u'Ᵽ', 'P'), \
(u'Ꝑ', 'P'), (u'Ꝙ', 'Q'), (u'Ꝗ', 'Q'), (u'Ŕ', 'R'), (u'Ř', 'R'), (u'Ŗ', 'R'), (u'Ṙ', 'R'), \
(u'Ṛ', 'R'), (u'Ṝ', 'R'), (u'Ȑ', 'R'), (u'Ȓ', 'R'), (u'Ṟ', 'R'), (u'Ɍ', 'R'), (u'Ɽ', 'R'), \
(u'Ꜿ', 'C'), (u'Ǝ', 'E'), (u'Ś', 'S'), (u'Ṥ', 'S'), (u'Š', 'S'), (u'Ṧ', 'S'), (u'Ş', 'S'), \
(u'Ŝ', 'S'), (u'Ș', 'S'), (u'Ṡ', 'S'), (u'Ṣ', 'S'), (u'Ṩ', 'S'), (u'Ť', 'T'), (u'Ţ', 'T'), \
(u'Ṱ', 'T'), (u'Ț', 'T'), (u'Ⱦ', 'T'), (u'Ṫ', 'T'), (u'Ṭ', 'T'), (u'Ƭ', 'T'), (u'Ṯ', 'T'), \
(u'Ʈ', 'T'), (u'Ŧ', 'T'), (u'Ɐ', 'A'), (u'Ꞁ', 'L'), (u'Ɯ', 'M'), (u'Ʌ', 'V'), (u'Ꜩ', 'TZ'), \
(u'Ú', 'U'), (u'Ŭ', 'U'), (u'Ǔ', 'U'), (u'Û', 'U'), (u'Ṷ', 'U'), (u'Ü', 'U'), (u'Ǘ', 'U'), \
(u'Ǚ', 'U'), (u'Ǜ', 'U'), (u'Ǖ', 'U'), (u'Ṳ', 'U'), (u'Ụ', 'U'), (u'Ű', 'U'), (u'Ȕ', 'U'), \
(u'Ù', 'U'), (u'Ủ', 'U'), (u'Ư', 'U'), (u'Ứ', 'U'), (u'Ự', 'U'), (u'Ừ', 'U'), (u'Ử', 'U'), \
(u'Ữ', 'U'), (u'Ȗ', 'U'), (u'Ū', 'U'), (u'Ṻ', 'U'), (u'Ų', 'U'), (u'Ů', 'U'), (u'Ũ', 'U'), \
(u'Ṹ', 'U'), (u'Ṵ', 'U'), (u'Ꝟ', 'V'), (u'Ṿ', 'V'), (u'Ʋ', 'V'), (u'Ṽ', 'V'), (u'Ꝡ', 'VY'), \
(u'Ẃ', 'W'), (u'Ŵ', 'W'), (u'Ẅ', 'W'), (u'Ẇ', 'W'), (u'Ẉ', 'W'), (u'Ẁ', 'W'), (u'Ⱳ', 'W'), \
(u'Ẍ', 'X'), (u'Ẋ', 'X'), (u'Ý', 'Y'), (u'Ŷ', 'Y'), (u'Ÿ', 'Y'), (u'Ẏ', 'Y'), (u'Ỵ', 'Y'), \
(u'Ỳ', 'Y'), (u'Ƴ', 'Y'), (u'Ỷ', 'Y'), (u'Ỿ', 'Y'), (u'Ȳ', 'Y'), (u'Ɏ', 'Y'), (u'Ỹ', 'Y'), \
(u'Ź', 'Z'), (u'Ž', 'Z'), (u'Ẑ', 'Z'), (u'Ⱬ', 'Z'), (u'Ż', 'Z'), (u'Ẓ', 'Z'), (u'Ȥ', 'Z'), \
(u'Ẕ', 'Z'), (u'Ƶ', 'Z'), (u'IJ', 'IJ'), (u'Œ', 'OE'), (u'ᴀ', 'A'), (u'ᴁ', 'AE'), (u'ʙ', 'B'), \
(u'ᴃ', 'B'), (u'ᴄ', 'C'), (u'ᴅ', 'D'), (u'ᴇ', 'E'), (u'ꜰ', 'F'), (u'ɢ', 'G'), (u'ʛ', 'G'), \
(u'ʜ', 'H'), (u'ɪ', 'I'), (u'ʁ', 'R'), (u'ᴊ', 'J'), (u'ᴋ', 'K'), (u'ʟ', 'L'), (u'ᴌ', 'L'), \
(u'ᴍ', 'M'), (u'ɴ', 'N'), (u'ᴏ', 'O'), (u'ɶ', 'OE'), (u'ᴐ', 'O'), (u'ᴕ', 'OU'), (u'ᴘ', 'P'), \
(u'ʀ', 'R'), (u'ᴎ', 'N'), (u'ᴙ', 'R'), (u'ꜱ', 'S'), (u'ᴛ', 'T'), (u'ⱻ', 'E'), (u'ᴚ', 'R'), \
(u'ᴜ', 'U'), (u'ᴠ', 'V'), (u'ᴡ', 'W'), (u'ʏ', 'Y'), (u'ᴢ', 'Z'), (u'á', 'a'), (u'ă', 'a'), \
(u'ắ', 'a'), (u'ặ', 'a'), (u'ằ', 'a'), (u'ẳ', 'a'), (u'ẵ', 'a'), (u'ǎ', 'a'), (u'â', 'a'), \
(u'ấ', 'a'), (u'ậ', 'a'), (u'ầ', 'a'), (u'ẩ', 'a'), (u'ẫ', 'a'), (u'ä', 'a'), (u'ǟ', 'a'), \
(u'ȧ', 'a'), (u'ǡ', 'a'), (u'ạ', 'a'), (u'ȁ', 'a'), (u'à', 'a'), (u'ả', 'a'), (u'ȃ', 'a'), \
(u'ā', 'a'), (u'ą', 'a'), (u'ᶏ', 'a'), (u'ẚ', 'a'), (u'å', 'a'), (u'ǻ', 'a'), (u'ḁ', 'a'), \
(u'ⱥ', 'a'), (u'ã', 'a'), (u'ꜳ', 'aa'), (u'æ', 'ae'), (u'ǽ', 'ae'), (u'ǣ', 'ae'), \
(u'ꜵ', 'ao'), (u'ꜷ', 'au'), (u'ꜹ', 'av'), (u'ꜻ', 'av'), (u'ꜽ', 'ay'), (u'ḃ', 'b'), \
(u'ḅ', 'b'), (u'ɓ', 'b'), (u'ḇ', 'b'), (u'ᵬ', 'b'), (u'ᶀ', 'b'), (u'ƀ', 'b'), (u'ƃ', 'b'), \
(u'ɵ', 'o'), (u'ć', 'c'), (u'č', 'c'), (u'ç', 'c'), (u'ḉ', 'c'), (u'ĉ', 'c'), (u'ɕ', 'c'), \
(u'ċ', 'c'), (u'ƈ', 'c'), (u'ȼ', 'c'), (u'ď', 'd'), (u'ḑ', 'd'), (u'ḓ', 'd'), (u'ȡ', 'd'), \
(u'ḋ', 'd'), (u'ḍ', 'd'), (u'ɗ', 'd'), (u'ᶑ', 'd'), (u'ḏ', 'd'), (u'ᵭ', 'd'), (u'ᶁ', 'd'), \
(u'đ', 'd'), (u'ɖ', 'd'), (u'ƌ', 'd'), (u'ı', 'i'), (u'ȷ', 'j'), (u'ɟ', 'j'), (u'ʄ', 'j'), \
(u'dz', 'dz'), (u'dž', 'dz'), (u'é', 'e'), (u'ĕ', 'e'), (u'ě', 'e'), (u'ȩ', 'e'), (u'ḝ', 'e'), \
(u'ê', 'e'), (u'ế', 'e'), (u'ệ', 'e'), (u'ề', 'e'), (u'ể', 'e'), (u'ễ', 'e'), (u'ḙ', 'e'), \
(u'ë', 'e'), (u'ė', 'e'), (u'ẹ', 'e'), (u'ȅ', 'e'), (u'è', 'e'), (u'ẻ', 'e'), (u'ȇ', 'e'), \
(u'ē', 'e'), (u'ḗ', 'e'), (u'ḕ', 'e'), (u'ⱸ', 'e'), (u'ę', 'e'), (u'ᶒ', 'e'), (u'ɇ', 'e'), \
(u'ẽ', 'e'), (u'ḛ', 'e'), (u'ꝫ', 'et'), (u'ḟ', 'f'), (u'ƒ', 'f'), (u'ᵮ', 'f'), (u'ᶂ', 'f'), \
(u'ǵ', 'g'), (u'ğ', 'g'), (u'ǧ', 'g'), (u'ģ', 'g'), (u'ĝ', 'g'), (u'ġ', 'g'), (u'ɠ', 'g'), \
(u'ḡ', 'g'), (u'ᶃ', 'g'), (u'ǥ', 'g'), (u'ḫ', 'h'), (u'ȟ', 'h'), (u'ḩ', 'h'), (u'ĥ', 'h'), \
(u'ⱨ', 'h'), (u'ḧ', 'h'), (u'ḣ', 'h'), (u'ḥ', 'h'), (u'ɦ', 'h'), (u'ẖ', 'h'), (u'ħ', 'h'), \
(u'ƕ', 'hv'), (u'í', 'i'), (u'ĭ', 'i'), (u'ǐ', 'i'), (u'î', 'i'), (u'ï', 'i'), (u'ḯ', 'i'), \
(u'ị', 'i'), (u'ȉ', 'i'), (u'ì', 'i'), (u'ỉ', 'i'), (u'ȋ', 'i'), (u'ī', 'i'), (u'į', 'i'), \
(u'ᶖ', 'i'), (u'ɨ', 'i'), (u'ĩ', 'i'), (u'ḭ', 'i'), (u'ꝺ', 'd'), (u'ꝼ', 'f'), (u'ᵹ', 'g'), \
(u'ꞃ', 'r'), (u'ꞅ', 's'), (u'ꞇ', 't'), (u'ꝭ', 'is'), (u'ǰ', 'j'), (u'ĵ', 'j'), (u'ʝ', 'j'), \
(u'ɉ', 'j'), (u'ḱ', 'k'), (u'ǩ', 'k'), (u'ķ', 'k'), (u'ⱪ', 'k'), (u'ꝃ', 'k'), (u'ḳ', 'k'), \
(u'ƙ', 'k'), (u'ḵ', 'k'), (u'ᶄ', 'k'), (u'ꝁ', 'k'), (u'ꝅ', 'k'), (u'ĺ', 'l'), (u'ƚ', 'l'), \
(u'ɬ', 'l'), (u'ľ', 'l'), (u'ļ', 'l'), (u'ḽ', 'l'), (u'ȴ', 'l'), (u'ḷ', 'l'), (u'ḹ', 'l'), \
(u'ⱡ', 'l'), (u'ꝉ', 'l'), (u'ḻ', 'l'), (u'ŀ', 'l'), (u'ɫ', 'l'), (u'ᶅ', 'l'), (u'ɭ', 'l'), \
(u'ł', 'l'), (u'lj', 'lj'), (u'ſ', 's'), (u'ẜ', 's'), (u'ẛ', 's'), (u'ẝ', 's'), (u'ḿ', 'm'), \
(u'ṁ', 'm'), (u'ṃ', 'm'), (u'ɱ', 'm'), (u'ᵯ', 'm'), (u'ᶆ', 'm'), (u'ń', 'n'), (u'ň', 'n'), \
(u'ņ', 'n'), (u'ṋ', 'n'), (u'ȵ', 'n'), (u'ṅ', 'n'), (u'ṇ', 'n'), (u'ǹ', 'n'), (u'ɲ', 'n'), \
(u'ṉ', 'n'), (u'ƞ', 'n'), (u'ᵰ', 'n'), (u'ᶇ', 'n'), (u'ɳ', 'n'), (u'ñ', 'n'), (u'nj', 'nj'), \
(u'ó', 'o'), (u'ŏ', 'o'), (u'ǒ', 'o'), (u'ô', 'o'), (u'ố', 'o'), (u'ộ', 'o'), (u'ồ', 'o'), \
(u'ổ', 'o'), (u'ỗ', 'o'), (u'ö', 'o'), (u'ȫ', 'o'), (u'ȯ', 'o'), (u'ȱ', 'o'), (u'ọ', 'o'), \
(u'ő', 'o'), (u'ȍ', 'o'), (u'ò', 'o'), (u'ỏ', 'o'), (u'ơ', 'o'), (u'ớ', 'o'), (u'ợ', 'o'), \
(u'ờ', 'o'), (u'ở', 'o'), (u'ỡ', 'o'), (u'ȏ', 'o'), (u'ꝋ', 'o'), (u'ꝍ', 'o'), (u'ⱺ', 'o'), \
(u'ō', 'o'), (u'ṓ', 'o'), (u'ṑ', 'o'), (u'ǫ', 'o'), (u'ǭ', 'o'), (u'ø', 'o'), (u'ǿ', 'o'), \
(u'õ', 'o'), (u'ṍ', 'o'), (u'ṏ', 'o'), (u'ȭ', 'o'), (u'ƣ', 'oi'), (u'ꝏ', 'oo'), (u'ɛ', 'e'), \
(u'ᶓ', 'e'), (u'ɔ', 'o'), (u'ᶗ', 'o'), (u'ȣ', 'ou'), (u'ṕ', 'p'), (u'ṗ', 'p'), (u'ꝓ', 'p'), \
(u'ƥ', 'p'), (u'ᵱ', 'p'), (u'ᶈ', 'p'), (u'ꝕ', 'p'), (u'ᵽ', 'p'), (u'ꝑ', 'p'), (u'ꝙ', 'q'), \
(u'ʠ', 'q'), (u'ɋ', 'q'), (u'ꝗ', 'q'), (u'ŕ', 'r'), (u'ř', 'r'), (u'ŗ', 'r'), (u'ṙ', 'r'), \
(u'ṛ', 'r'), (u'ṝ', 'r'), (u'ȑ', 'r'), (u'ɾ', 'r'), (u'ᵳ', 'r'), (u'ȓ', 'r'), (u'ṟ', 'r'), \
(u'ɼ', 'r'), (u'ᵲ', 'r'), (u'ᶉ', 'r'), (u'ɍ', 'r'), (u'ɽ', 'r'), (u'ↄ', 'c'), (u'ꜿ', 'c'), \
(u'ɘ', 'e'), (u'ɿ', 'r'), (u'ś', 's'), (u'ṥ', 's'), (u'š', 's'), (u'ṧ', 's'), (u'ş', 's'), \
(u'ŝ', 's'), (u'ș', 's'), (u'ṡ', 's'), (u'ṣ', 's'), (u'ṩ', 's'), (u'ʂ', 's'), (u'ᵴ', 's'), \
(u'ᶊ', 's'), (u'ȿ', 's'), (u'ɡ', 'g'), (u'ᴑ', 'o'), (u'ᴓ', 'o'), (u'ᴝ', 'u'), (u'ť', 't'), \
(u'ţ', 't'), (u'ṱ', 't'), (u'ț', 't'), (u'ȶ', 't'), (u'ẗ', 't'), (u'ⱦ', 't'), (u'ṫ', 't'), \
(u'ṭ', 't'), (u'ƭ', 't'), (u'ṯ', 't'), (u'ᵵ', 't'), (u'ƫ', 't'), (u'ʈ', 't'), (u'ŧ', 't'), \
(u'ᵺ', 'th'), (u'ɐ', 'a'), (u'ᴂ', 'ae'), (u'ǝ', 'e'), (u'ᵷ', 'g'), (u'ɥ', 'h'), (u'ʮ', 'h'), \
(u'ʯ', 'h'), (u'ᴉ', 'i'), (u'ʞ', 'k'), (u'ꞁ', 'l'), (u'ɯ', 'm'), (u'ɰ', 'm'), (u'ᴔ', 'oe'), \
(u'ɹ', 'r'), (u'ɻ', 'r'), (u'ɺ', 'r'), (u'ⱹ', 'r'), (u'ʇ', 't'), (u'ʌ', 'v'), (u'ʍ', 'w'), \
(u'ʎ', 'y'), (u'ꜩ', 'tz'), (u'ú', 'u'), (u'ŭ', 'u'), (u'ǔ', 'u'), (u'û', 'u'), (u'ṷ', 'u'), \
(u'ü', 'u'), (u'ǘ', 'u'), (u'ǚ', 'u'), (u'ǜ', 'u'), (u'ǖ', 'u'), (u'ṳ', 'u'), (u'ụ', 'u'), \
(u'ű', 'u'), (u'ȕ', 'u'), (u'ù', 'u'), (u'ủ', 'u'), (u'ư', 'u'), (u'ứ', 'u'), (u'ự', 'u'), \
(u'ừ', 'u'), (u'ử', 'u'), (u'ữ', 'u'), (u'ȗ', 'u'), (u'ū', 'u'), (u'ṻ', 'u'), (u'ų', 'u'), \
(u'ᶙ', 'u'), (u'ů', 'u'), (u'ũ', 'u'), (u'ṹ', 'u'), (u'ṵ', 'u'), (u'ᵫ', 'ue'), (u'ꝸ', 'um'), \
(u'ⱴ', 'v'), (u'ꝟ', 'v'), (u'ṿ', 'v'), (u'ʋ', 'v'), (u'ᶌ', 'v'), (u'ⱱ', 'v'), (u'ṽ', 'v'), \
(u'ꝡ', 'vy'), (u'ẃ', 'w'), (u'ŵ', 'w'), (u'ẅ', 'w'), (u'ẇ', 'w'), (u'ẉ', 'w'), (u'ẁ', 'w'), \
(u'ⱳ', 'w'), (u'ẘ', 'w'), (u'ẍ', 'x'), (u'ẋ', 'x'), (u'ᶍ', 'x'), (u'ý', 'y'), (u'ŷ', 'y'), \
(u'ÿ', 'y'), (u'ẏ', 'y'), (u'ỵ', 'y'), (u'ỳ', 'y'), (u'ƴ', 'y'), (u'ỷ', 'y'), (u'ỿ', 'y'), \
(u'ȳ', 'y'), (u'ẙ', 'y'), (u'ɏ', 'y'), (u'ỹ', 'y'), (u'ź', 'z'), (u'ž', 'z'), (u'ẑ', 'z'), \
(u'ʑ', 'z'), (u'ⱬ', 'z'), (u'ż', 'z'), (u'ẓ', 'z'), (u'ȥ', 'z'), (u'ẕ', 'z'), (u'ᵶ', 'z'), \
(u'ᶎ', 'z'), (u'ʐ', 'z'), (u'ƶ', 'z'), (u'ɀ', 'z'), (u'ff', 'ff'), (u'ffi', 'ffi'), (u'ffl', 'ffl'), \
(u'fi', 'fi'), (u'fl', 'fl'), (u'ij', 'ij'), (u'œ', 'oe'), (u'st', 'st'), (u'ₐ', 'a'), (u'ₑ', 'e'), \
(u'ᵢ', 'i'), (u'ⱼ', 'j'), (u'ₒ', 'o'), (u'ᵣ', 'r'), (u'ᵤ', 'u'), (u'ᵥ', 'v'), (u'ₓ', 'x'), \
('[^\x00-\x7F]', '?')]
sub_str = chr_replacements[14]
# Use regexp_replace to substitute characters
DATA_INPUT_DF = DATA_INPUT_DF.withColumn("Inc_Summary", F.regexp_replace(DATA_INPUT_DF.Inc_Summary, sub_str[0], sub_str[1]))
sub_str = chr_replacements[66]
# Use regexp_replace to substitute characters
DATA_INPUT_DF = DATA_INPUT_DF.withColumn("Inc_Summary", F.regexp_replace(DATA_INPUT_DF.Inc_Summary, sub_str[0], sub_str[1]))
return DATA_INPUT_DF
When I try to loop over all the tuples in my list I get a StackOverflow error
for sub_str in chr_replacements:
# Use regexp_replace to substitute characters
DATA_INPUT_DF = DATA_INPUT_DF.withColumn("Inc_Summary", F.regexp_replace(DATA_INPUT_DF.Inc_Summary, sub_str[0], sub_str[1]))
I've tried all the various ways of doing this I could find by Googling this, but for me none work
What am i doing wrong?

Related

Pyspark union column values from string separate with comma into array

I have a pyspark request to union multiple dataframes on id. Each dataframe has a certain column with comma separate strings.i.e.
df1=[("1", "a,b,c,"),
("2", "i,j,k"),
("3", "x,y,z")]
df2=[("1", "b,d,e"),
("2", "l,m,n"),
("3", "x")]
Now I want to union this column's value of each entry together.i.e.
df3=[("1", "a,b,c,d,e"),
("2", "i,j,k,l,m,n"),
("3", "x,y,z")]
is there a function to do that?
What you are looking for is the array_union function.
data1 = [
('1', 'a,b,c'),
('2', 'i,j,k'),
('3', 'x,y,z')
]
data2 = [
('1', 'b,d,e'),
('2', 'l,m,n'),
('3', 'x')
]
df1 = spark.createDataFrame(data1, ['id', 'values1'])
df2 = spark.createDataFrame(data2, ['id', 'values2'])
df = df1.join(df2, 'id') \
.select('id',
F.array_join(F.array_union(F.split('values1', ','), F.split('values2', ',')), ',').alias('values'))
df.show(truncate=False)

group data in pyspark and get the topn data in each group

I have a data, may be simply shown as:
conf = SparkConf().setMaster("local[*]").setAppName("test")
sc = SparkContext(conf=conf).getOrCreate()
spark = SparkSession(sparkContext=sc).builder.getOrCreate()
rdd = sc.parallelize([(1, 10), (3, 11), (1, 8), (1, 12), (3, 7), (3, 9)])
data = spark.createDataFrame(rdd, ['x', 'y'])
data.show()
def f(x):
y = sorted(x, reverse=True)[:2]
return y
h_f = udf(f, IntegerType())
h_f = spark.udf.register("h_f", h_f)
data.groupBy('x').agg({"y": h_f}).show()
But it went wrong: AttributeError: 'function' object has no attribute '_get_object_id', how can I get the topn item in each group?
Considering you are looking for top n 'y' elements which belongs to the each group of 'x'.
from pyspark.sql import Window
from pyspark.sql import functions as F
import sys
rdd = sc.parallelize([(1, 10), (3, 11), (1, 8), (1, 12), (3, 7), (3, 9)])
df = spark.createDataFrame(rdd, ['x', 'y'])
df.show()
df_g = df.groupBy('x').agg(F.collect_list('y').alias('y'))
df_g = df_g.withColumn('y_sorted', F.sort_array('y', asc = False))
df_g.withColumn('y_slice', F.slice(df_g.y_sorted, 1, 2)).show()
Output
+---+-----------+-----------+--------+
| x| y| y_sorted| y_slice|
+---+-----------+-----------+--------+
| 1|[10, 8, 12]|[12, 10, 8]|[12, 10]|
| 3| [11, 7, 9]| [11, 9, 7]| [11, 9]|
+---+-----------+-----------+--------+

Pyspark | Transform RDD from key with list of values > values with list of keys

In pyspark, how to transform an input RDD where Every Key has a list of Values to an output RDD where Every Value has a list of Keys it belong to?
Input
[(1, ['a','b','c','e']), (2, ['b','d']), (3, ['a','d']), (4, ['b','c'])]
Output
[('a', [1, 3]), ('b', [1, 2, 4]), ('c', [1, 4]), ('d', [2,3]), ('e', [1])]
Flatten and swap the key value on the rdd first, and then groupByKey:
rdd.flatMap(lambda r: [(k, r[0]) for k in r[1]]).groupByKey().mapValues(list).collect()
# [('a', [1, 3]), ('e', [1]), ('b', [1, 2, 4]), ('c', [1, 4]), ('d', [2, 3])]

How to create possible set and sum dictionary value of same key on RDD pyspark?

I have a sample of data below and I wrote my code to convert a dictionary to sum dictionary value that has the same key.
import itertools
d = [frozenset({'112', 'a', 'e'}), frozenset({'112', 'a', 'e', 'd'})]
rdd = sc.parallelize(d)
def f_itemset(data):
d = {}
for i in range(1, len(data)+1):
for x in itertools.combinations(data, i+1):
if x not in d:
d[x] += 1
else:
d[x] = 1
return d
Ck = rdd.map(lambda s: sorted([l for l in s])).map(lambda x: [f_itemset(x))
print(Ck.collect())
The output is shown below.
[{('112', 'a'): 1, ('112', 'e'): 1, ('a', 'e'): 1, ('112', 'a', 'e'): 1}, {('112', 'a'): 1, ('112', 'd'): 1, ('112', 'e'): 1, ('a', 'd'): 1, ('a', 'e'): 1, ('d', 'e'): 1, ('112', 'a', 'd'): 1, ('112', 'a', 'e'): 1, ('112', 'd', 'e'): 1, ('a', 'd', 'e'): 1, ('112', 'a', 'd', 'e'): 1}]
But, I want the output is:
[{('112', 'a'): 2, ('112', 'e'): 2, ('a', 'e'): 2, ('112', 'a', 'e'): 2, ('112', 'd'): 1, ('a', 'd'): 1, ('d', 'e'): 1, ('112', 'a', 'd'): 1, ('112', 'd', 'e'): 1, ('a', 'd', 'e'): 1, ('112', 'a', 'd', 'e'): 1}]
Please, anyone, advise me.
I omitted some of your initial statements and included an additional reduceByKey method to achieve the counting. Unfortunately, it is by default only possible to process lists with reduceByKey. If you really want to stick to dictionaries you have to create an own method for the reduction. Otherwise this code can help you.
import itertools
d = [frozenset({'112', 'a', 'e'}), frozenset({'112', 'a', 'e', 'd'})]
rdd = sc.parallelize(d)
def f_itemset(data):
l = list()
for i in range(1, len(data)+1):
for x in itertools.combinations(data, i+1):
l.append(x)
return l
Ck = rdd.map(lambda s: sorted([l for l in s])).flatMap(lambda x: f_itemset(x)).map(lambda x: (x,1)).reduceByKey(lambda x,y: x+y)
print(Ck.collect())
Result:
[(('112', 'e'), 2), (('a', 'd', 'e'), 1), (('112', 'd'), 1), (('112', 'a'), 2), (('a', 'e'), 2), (('112', 'a', 'd', 'e'), 1), (('a', 'd'), 1), (('d', 'e'), 1), (('112', 'a', 'e'), 2), (('112', 'a', 'd'), 1), (('112', 'd', 'e'), 1)]

pyspark generate rdd row wise using another field as a source

Input RDD
--------------------
A,123|124|125|126
B,123|124|125|126
From this rdd I need to generate another in the below format
Output RDD
--------------------
A,123
A,124
A,125
A,126
B,123
B,124
B,125
B,126
x = sc.parallelize([("a", ["x", "y", "z"]), ("b", ["p", "r"])])
def f(x): return x
x.flatMapValues(f).collect()
[('a', 'x'), ('a', 'y'), ('a', 'z'), ('b', 'p'), ('b', 'r')]