Apache spark Spark中的数据类型不正确

Apache spark Spark中的数据类型不正确,apache-spark,Apache Spark,在spark中创建数据帧时,列的类型错误。我有数百列,不知道如何最好地更改每列的数据类型。幸运的是,其中大多数都应该是数字 以下是我的工作: val df = sc.textFile("user/name/testC.tsv") # Removing the first line. val dfLines = df.filter(x => !x.contains("test_name") # I am picking columns I want.

在spark中创建数据帧时,列的类型错误。我有数百列,不知道如何最好地更改每列的数据类型。幸运的是,其中大多数都应该是数字

以下是我的工作:

val df = sc.textFile("user/name/testC.tsv")
# Removing the first line.
val dfLines = df.filter(x => !x.contains("test_name")
# I am picking columns I want.
val rowRDD = df.lines.map( x => x.split("\t")).map (x(2), x(4), x(11), x(12)))
# Creating a data frame.
val df = rowRDD.toDF("cycle", "dut", "metric1", "metric2")
列应该是数字,但
df
只有字符串:

(String, String, String, String, String, String, String, String, String, String, String, String, String) =
  (100,0,255,34,33,25,29,32,26,44,31,0,UP) 

拾取列时,可以执行转换。例如:

val rowRDD = df.lines
  .map(x => x.split("\t"))
  .map((x(2).toInt, x(4), x(11).toDouble, x(12).toDouble))

(假设
cycle
为整数,
dut
为字符串,
metric1
metric2
为实数。)

选择列时,可以执行转换。例如:

val rowRDD = df.lines
  .map(x => x.split("\t"))
  .map((x(2).toInt, x(4), x(11).toDouble, x(12).toDouble))

(假设
cycle
是一个整数,
dut
是一个字符串,
metric1
metric2
是实数。)

你能显示数据吗,这样我们就可以找出问题了吗?下面是我要做的:val df=sc.textFile(“user/name/testC.tsv”)val dfLines=df.filter(x=>!x.contains(“test_name”)#删除第一行val rowRDD=df.Lines.map(x=>x.split(“\t”)).map(x(2),x(4),x(11),x(12))#我正在挑选我想要的列。val df=rowRDD.toDF(“周期”、“dut”、“度量1”、“度量2”)#创建数据帧。列应该是数字的,但df只有字符串:(字符串、字符串、字符串、字符串、字符串、字符串、字符串、字符串、字符串、字符串、字符串、字符串、字符串)=(100,0255,34,33,25,29,32,26,44,31,0,向上)您能显示数据吗,这样我们就可以找出问题了吗?下面是我要做的:val df=sc.textFile(“user/name/testC.tsv”)val dfLines=df.filter(x=>!x.contains(“test_name”)#删除第一行val rowRDD=df.Lines.map(x=>x.split(“\t”)).map(x(2),x(4),x(11),x(12))#我正在选择我想要的列。val df=rowRDD.toDF(“周期”、“dut”、“度量1”、“度量2”)#创建数据帧。列应该是数字的,但df只有字符串:(字符串,字符串,字符串,字符串,字符串,字符串,字符串,字符串,字符串,字符串,字符串)=(100,0255,34,33,25,29,32,26,44,31,0,向上)这是您能做的最好的了。从文件加载数据时,所有内容都是字符串。在将数据转换为DF之前,需要为数据指定类型。否则,您可以在每次读取字段时使用例如,
dff.getAs[Int](“name”)
。非常感谢Daniel!这很有效:)如果可以的话,还有一个问题:如何在spark中堆叠数据帧中的列,同时将其他未堆叠的列保留在新数据帧中。在R中,使用重塑包很容易做到这一点。堆叠意味着什么?将列串联在一起。我不知道将列串联在一起意味着什么:)。我不知道。如果它与这个问题无关,最好在另一个问题中提问。你有更好的机会得到答案。如果与此问题密切相关,请编辑此问题并描述堆叠部分。这是您所能做的最好的。从文件加载数据时,所有内容都是字符串。在将数据转换为DF之前,需要为数据指定类型。否则,您可以在每次读取字段时使用例如,
dff.getAs[Int](“name”)
。非常感谢Daniel!这很有效:)如果可以的话,还有一个问题:如何在spark中堆叠数据帧中的列,同时将其他未堆叠的列保留在新数据帧中。在R中,使用重塑包很容易做到这一点。堆叠意味着什么?将列串联在一起。我不知道将列串联在一起意味着什么:)。我不知道。如果它与这个问题无关,最好在另一个问题中提问。你有更好的机会得到答案。如果与此问题密切相关,请编辑此问题并描述堆叠部分。