当前位置: 首页 > 知识库问答 >
问题:

Spark csv阅读器:无法将尾随点和零的数字读入整数

郎翔
2023-03-14

所以我有一个csv文件,其中的数字是整数,但有尾随。0

Category,ItemID
Category A,1.0
Category B,2.0
Category C,3.0
Category A,4.0
Category B,5.0

当我使用spark csv reader时,给出一个将列指定为整数的模式,它将返回null。

from pyspark.sql.functions import col

schema = StructType([
    StructField('Category', StringType(), False),
    StructField('ItemID', IntegerType(), False),
])

df2 = spark.read.csv(
            './output.csv',
            enforceSchema=True,
            schema=schema)
df2.show()

回报

+----------+------+
|  Category|ItemID|
+----------+------+
|  Category|  null|
|Category A|  null|
|Category B|  null|
|Category C|  null|
|Category A|  null|
|Category B|  null|
+----------+------+

当我将其读取为浮点数,然后将列转换为整数时,它有效。

from pyspark.sql.functions import col

schema = StructType([
    StructField('Category', StringType(), False),
    StructField('ItemID', DoubleType(), False),
])

df2 = spark.read.csv(
            './output.csv',
            enforceSchema=True,
            schema=schema)

df2=df2.withColumn("ItemID",col("ItemID").cast(IntegerType()))
df2.show()
print(df2.dtypes)

显示器

+----------+------+
|  Category|ItemID|
+----------+------+
|  Category|  null|
|Category A|     1|
|Category B|     2|
|Category C|     3|
|Category A|     4|
|Category B|     5|
+----------+------+

这是正常行为吗?我可以将复杂的步骤保存为先读取浮点数,然后强制转换它们吗?

谢谢

共有1个答案

锺伟志
2023-03-14

是的,这是意料之中的。您需要将其读取为float,然后应用类型转换。

 类似资料:
  • 当服务器对象的公共方法被调用时,这个名为“服务”的切入点会在程序的执行过程中挑出这些点。它还允许任何使用服务切入点的人访问其方法被调用的服务器对象。(摘自https://eclipse.org/aspectj/doc/released/progguide/language-anatomy.html) 我正在试图理解AspectJ的切入点,现在我有点困惑。我的主要问题是:您如何阅读上述切入点,以及如

  • 最近,我将一个DB迁移到PostgreSQL,其中有一些列定义为和。在测试这个应用程序时,我发现当数据保存到这些列时,会有尾随零被添加到插入的值中。我正在使用Hibernate,我的日志显示了为准备好的语句构建的正确值。 我插入的数据示例是列中的0.75,存储的值是0.750。列的另一个示例:我插入值12,DB保持12.0000。 我发现了这个相关的问题:没有尾随零的postgresql数字类型。

  • 问题内容: 我想在使用Python的模块在Python数据结构和csv表示形式之间来回切换时区分和空字符串。 我的问题是,当我运行时: 我得到以下输出: 当然,我可以使用和区分和清空字符串,例如: 但这会部分破坏我对模块的兴趣(在C中实现快速反序列化/串行化,尤其是在处理大型列表时)。 是否有一个或参数,并能够使他们之间的区别,并在此用例? 如果不是,是否有兴趣实施补丁以实现这种来回交互?(可能是

  • 我的java程序中有一些浮点变量: 在我的计算中,浮点变量小数点后的位数会增加或减少,以保持精度。例如,在一些计算系统之后。出来println(var1);可打印: 或 或 我想将这些值四舍五入到小数点后的3位,并删除后续的小数位数,以便对float进行四舍五入,如下所示: 据我所知,数字格式和字符串。format()以格式化字符串的形式返回输出。如何将输出作为四舍五入浮点,以便在计算中进一步使用

  • 我是C编程新手,我想找出给定数的阶乘中尾随零的数量 我尝试计算数字的模,它将返回给定数字的最后一位作为余数,然后将删除最后一个数字。 执行程序后,输出总是将尾随零的数量显示为“0”,如果(ln=!0)条件始终得到满足,即使存在零。

  • 我试图计算给定数字的阶乘中尾随零的数量,例如。, ,其中尾随零 ,其中尾随零 我的问题是,我有一个像df这样的数据帧 我知道R中的阶乘是用来计算阶乘的,但我不知道如何计算尾部的零。任何帮助都将不胜感激!