以人类可读的格式投射大数字

cast big number in human readable format

我正在笔记本上使用数据块。

我有一列包含这样的数字 103503119090884718216391506040

它们是字符串格式。我可以打印它们并轻松阅读它们。

出于调试目的,我需要能够阅读它们。但是我还需要能够应用它们 .sort() 方法。将它们转换为 IntegerType() return 空值,将它们转换为 double 使它们不可读。

如何将它们转换为人类可读的格式,同时又能使 .sort() 有效?我需要创建两个单独的列吗?

要使列可排序,您可以将列转换为 DecimalType(precision, scale) (https://spark.apache.org/docs/latest/api/python/reference/api/pyspark.sql.types.DecimalType.html#pyspark.sql.types.DecimalType)。对于这种数据类型,您可以选择两个参数的可能取值范围

from pyspark.sql import SparkSession, Row, types as T, functions as F

spark = SparkSession.builder.getOrCreate()

df = spark.createDataFrame([
    Row(string_column='103503119090884718216391506040'),
    Row(string_column='103503119090884718216391506039'),
    Row(string_column='90'),
])

(
    df
    .withColumn('decimal_column', F.col('string_column').cast(T.DecimalType(30,0)))
    .sort('decimal_column')
    .show(truncate=False)
)
# Output
+------------------------------+------------------------------+
|string_column                 |decimal_column                |
+------------------------------+------------------------------+
|90                            |90                            |
|103503119090884718216391506039|103503119090884718216391506039|
|103503119090884718216391506040|103503119090884718216391506040|
|103503119090884718216391506041|103503119090884718216391506041|
+------------------------------+------------------------------+

关于“人类可读性”,我不确定这是否有帮助。