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

反复更改列类型会触发数据帧

阎作人
2023-03-14

我有一个类似Scala的列名列表

var cols = List("col1", "col2", "col3","col4")

我也有一个包含这些列的数据框架,但都是字符串。现在我想通过遍历数据帧的列表或列来转换数据帧的列,因为我的列列表非常大,我不能使用这么多。与列参数

提前感谢

共有2个答案

邓禄
2023-03-14

如果要将特定类型的多个列更改为另一个列,而不指定单独的列名。我已经把答案贴在这里了https://stackoverflow.com/a/60552157/3351492

葛兴发
2023-03-14

如果您预先知道输出类型,那么只需在列上映射类似的内容即可

val df = sc.parallelize(Seq(
  ("foo", "1.0", "2", "true"),
  ("bar", "-1.0", "5", "false")
)).toDF("v", "x", "y", "z")

val types = Seq(
  ("v", "string"), ("x", "double"), ("y", "bigint"), ("z", "boolean")
)

df.select(types.map{case (c, t) => col(c).cast(t)}: _*)

如果你不知道类型,问题要复杂得多。虽然可以创建能够处理模式推断的自定义解析器,但修复上游管道可能更有意义。当您忽略数据类型时,使用Avro有什么意义。

 类似资料:
  • 问题内容: 我正在使用SQL数据库,我有一列名为“价格”。创建数据库后,将“价格”列设置为“我”,需要将其类型更改为不丢失数据库中的数据。这应该通过SQL脚本来完成 我想到了创建一个新列,将数据移到其中,删除旧列,然后重命名新创建的列。 有人可以帮我举个例子吗?在SQL中也有一个函数可以将字符串解析为十进制? 谢谢 问题答案: 您无需添加新列两次,只需在更新新列后删除旧列即可: 请注意,如果不是数

  • 问题内容: 我有一个针对ui-select2下拉菜单的手表设置(来自ui-bootstrap)。手表会在加载时触发,但不会在数据更改时触发,我不知道为什么。 不应用模型更改或不使用第三个参数进行相等性比较(至少来自我的代码)不是一个常见的问题。 我需要怎么做才能使其点火? 这是一个说明问题的小问题。 问题答案: 我修好了一些东西。 http://plnkr.co/edit/5Zaln7QT2gET

  • 如何在PySpark中更改嵌套列的datatype?对于rxample,如何将value的数据类型从string更改为int? 参考:如何在pyspark中将Dataframe列从String类型更改为Double类型

  • 我写了一个小代码来测试如何更改Python中DataFrame列的数据类型(版本3.8.5,并在Jupyter笔记本中运行代码)。但是它没有改变数据类型。知道我做错了什么吗? 但我不会把年龄修正为浮动。它仍在显示对象。下面给出了我从df.info()得到的结果。

  • 问题内容: 我们需要将某些列的数据类型从int更改为bigint。不幸的是,其中一些表很大,大约有7-10百万行(但不宽)。 Alter表alter列将永远保留在这些表上。有没有更快的方法来实现这一目标? 问题答案: 巧合的是,大约3个小时前,我不得不做一些非常相似的事情。该表是3500万行,它相当宽,并且花了很多时间才能做到这一点: 这就是我最终得到的结果: 这次,这些陈述几乎是即时的。(在速度

  • 问题内容: 我想将表示为列表列表的表转换为。作为一个极其简化的示例: 将列转换为适当类型的最佳方法是什么(在这种情况下,将列2和3转换为浮点数)?有没有一种方法可以在转换为DataFrame时指定类型?还是先创建DataFrame然后遍历各列以更改各列的类型更好?理想情况下,我想以动态方式执行此操作,因为可以有数百个列,并且我不想确切指定哪些列属于哪种类型。我可以保证的是,每一列都包含相同类型的值