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

Spark-scala:与列不是单位的成员

厍晋鹏
2023-03-14

我正在尝试使用spark df读取spark中的CSV文件。文件没有标题列,但我想有标题列。如何做到这一点?我不知道我是否正确,我写了这个命令-

并将列名作为列的_c0和_c1。然后我尝试使用:val df1=df.with列重命名("_c0","系列")将列名更改为所需的名称,但我得到"with列重命名"不是单元上的成员。

PS:我已经导入了spark.implicits._和spark.sql.functions。

请帮助我了解是否有任何方法可以将列标题添加到数据集,以及为什么会出现此问题。

共有2个答案

那昊
2023-03-14

如果您事先知道CSV文件的结构,那么定义一个模式并将其附加到df,同时将数据加载到df是一个更好的解决方案。

快速参考示例代码-

import org.apache.spark.sql.types._

val customSchema = StructType(Array(
  StructField("Series", StringType, true),
  StructField("Column2", StringType, true),
  StructField("Column3", IntegerType, true),
  StructField("Column4", DoubleType, true))
)

val df = spark.read.format("csv")
.option("header", "false") #since your file does not have header
.schema(customSchema)
.load("/path/genchan1.txt")

df.show()
胡星汉
2023-03-14

显示的返回类型为单位。请从末尾删除“显示”。

val df = spark.read.format("csv").load("/path/genchan1.txt")
df.show()

然后您可以使用所有df功能-

val df1 = df.withColumnRenamed("_c0","Series") 
 类似资料:
  • 在为一个小型Spark Scala应用程序从命令行运行“sbt包”时,我在以下代码行中得到“value$is not a member of StringContext”编译错误: Intellij 13.1给了我同样的错误消息。相同的。scala源代码在Eclipse 4.4.2中编译时没有任何问题。此外,它在命令行的一个单独的maven项目中与maven配合良好。 sbt似乎无法识别$符号,因

  • 我对Spark Streaming是新手,从Spark Streaming我使用Kafkautils创建了一个直接到Kafka的流。如下所示 当我试图运行该作业时,它正抛出以下错误 下面是我的pom.xml 请让我知道如何解决这个问题。

  • 我更喜欢Python而不是Scala。但是,由于Spark本机是用Scala编写的,出于明显的原因,我希望我的代码在Scala版本中比在Python版本中运行得更快。 基于这个假设,我想学习&为大约1 GB的数据编写一些非常常见的预处理代码的Scala版本。数据取自Kaggle上的SpringLeaf比赛。只是为了给出数据的概述(它包含1936个维度和145232行)。数据由各种类型组成,如int

  • null 每当我尝试访问sc时,我会得到以下错误。我在这里做错了什么?

  • 我很好奇这样做的正确方式。假设我想从一个方法中发出成功或失败的信号。如果在成功的情况下我没有什么想说的,除了它成功了,这是可以接受的吗? 那么,从这个方法返回Right()的正确方法是什么呢?显然,仅仅返回Right()就给出了一个弃用警告(通过插入()来调整参数列表的做法已被弃用)。 我也可能做Option[抛弃],但这不符合我阅读Option的精神。或者返回scala的结果。util。尝试并评

  • 我有一个由col1和col2列聚合的源数据集。Col2值通过按位或运算进行聚合。我需要对Col2值应用过滤器,以选择位为8,4,2的记录 初始源原始数据 将Col1值折叠为每Col1值一行后,基于“上面的SourceRawData”聚合源数据,这是其他团队和Col2值通过按位或运算聚合的结果。注意我这里提供的是输出,而不是实际的聚合逻辑 现在,我需要对上面的聚合数据集应用过滤器,以根据原始源原始数