以人类可读的格式投射大数字
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|
+------------------------------+------------------------------+
关于“人类可读性”,我不确定这是否有帮助。
我正在笔记本上使用数据块。
我有一列包含这样的数字 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|
+------------------------------+------------------------------+
关于“人类可读性”,我不确定这是否有帮助。