首页 > 解决方案 > 关于在 spark 中指定模式的最佳选择以及如何从 rdd spark 中删除/删除列的问题?

问题描述

我有两个数据集纽约出租车数据和天气数据。天气数据来自大量列,大约 100 个,其中我只需要 5-10 个。我希望它们被输入而不是字符串,因此需要一个模式。我知道两种方法

  1. Rdd->Rows->给出模式然后转换为DF
  2. Dataframe InferSchema(文档说它的双通道)

inferSchema 对于 100 列的事情是一个不错的选择,并且不必为 100 列编写 StructType 或 CaseClass 吗?还有十亿多条记录的出租车数据,它也有大约 60 列,但我只需要大约 10 列。这个数据集的合适选择是什么?为所有 60 列编写模式?

第二个问题:正如我提到的,我不需要所有的列,所以我要删除列。从文档和 Internet 中,我知道如何使用 DF 来执行此操作,只需使用 select 功能。但是我以防万一我必须编写在我的知识中只能使用 RDD 才能实现的模式。如何删除/删除 RDD 中的列?

理想情况下,使用任何 RDD/DF id 喜欢先删除列然后指定模式。这可能吗?我知道这是很多问题,但我是一个新手,所有这些都在我脑海中浮现,我想以正确的方式去做。

谢谢

标签: scalaapache-sparkpysparkapache-spark-sqlrdd

解决方案


你不需要RDD来实现它,它真的很简单。只需将您的数据加载到 DF,然后选择并转换想要的列。

scala> val df = Seq("1","2","3").toDF("c1")
scala> df.show()
+---+
| c1|
+---+
|  1|
|  2|
|  3|
+---+
scala> df.printSchema()
root
 |-- c1: string (nullable = true)

scala> val newDF = df.select('c1.cast("int"))
scala> newDF.printSchema()
root
 |-- c1: integer (nullable = true)

推荐阅读