В чем разница между CAST (... в STRING) и BASE64 (...) - PullRequest
0 голосов
/ 02 июня 2019

При преобразовании из VARBINARY в STRING мне интересно, взаимозаменяемы ли операции CAST (... в STRING) и BASE64 (...) в Spark sql.Если нет, то в чем разница?

1 Ответ

0 голосов
/ 02 июня 2019

Они (полностью) различны, когда при преобразовании двоичного кода в строку Spark интерпретирует байты как UTF-8 кодированные данные, тогда как Base64 кодирует байты в текст, используя некоторые распространенные печатные символы . Например, при преобразовании байта 33 в строку UTF-8 будет получена строка "!", поскольку точка 33 в Unicode является восклицательным знаком.

val df = Seq(Array[Byte](33)).toDF("test")
df.select($"test".cast(StringType)).show()
+----+
|test|
+----+
|   !|
+----+

и base64:

df.select(base64($"test")).show()
+------------+
|base64(test)|
+------------+
|        IQ==|
+------------+

Обратите внимание, что приведение байтов к строке предполагает кодировку UTF-8, поэтому

val df = Seq("foo".getBytes(StandardCharsets.UTF_8),
             "foo".getBytes(StandardCharsets.UTF_16)).toDF("test")

df.select($"test".cast(StringType)).show()

Выход:

+--------+
|    test|
+--------+
|     foo|
|���f�o�o   |
+--------+
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...