【问题标题】:Add column names to data read from csv file without column names将列名添加到从没有列名的 csv 文件读取的数据中
【发布时间】:2018-04-17 15:52:56
【问题描述】:

我正在使用 Apache Spark 和 Scala。

我有一个第一行没有列名的 csv 文件。是这样的:

28,Martok,49,476
29,Nog,48,364
30,Keiko,50,175
31,Miles,39,161

这些列代表 ID、姓名、年龄、numOfFriends。

在我的 Scala 对象中,我使用来自 csv 文件的 SparkSession 创建数据集,如下所示:

val spark = SparkSession.builder.master("local[*]").getOrCreate()
val df = spark.read.option("inferSchema","true").csv("../myfile.csv")
df.printSchema()

当我运行程序时,结果是:

|-- _c0: integer (nullable = true)
|-- _c1: string (nullable = true)
|-- _c2: integer (nullable = true)
|-- _c3: integer (nullable = true)

如何向数据集中的列添加名称?

【问题讨论】:

标签: scala csv apache-spark apache-spark-sql


【解决方案1】:

读取CSV文件时可以使用toDF指定列名:

val df = spark.read.option("inferSchema","true").csv("../myfile.csv").toDF(
  "ID", "name", "age", "numOfFriends"
)

或者,如果您已经创建了 DataFrame,您可以将其列重命名如下:

val newColNames = Seq("ID", "name", "age", "numOfFriends")
val df2 = df.toDF(newColNames: _*)

【讨论】:

  • 你能提供类似的java解决方案吗?我有一个没有标题的 Dataset,我想从中选择一些列而不是全部。
  • @user812142,我在 Spark 上使用 Java 的工作不多。也许这个SO answer 可能会给出一些提示;如果没有,我建议发布一个包含特定要求和示例数据的单独问题。
  • 能否为 PySpark 中的问题提供解决方案?
【解决方案2】:
toDf           

可以使用方法,在spark java中可以传入列名。

例子:

Dataset<Row> rowsWithTitle = sparkSession.read().option("header", "true").option("delimiter", "\t").csv("file").toDF("h1", "h2");

【讨论】:

    猜你喜欢
    • 2022-01-08
    • 1970-01-01
    • 1970-01-01
    • 2014-06-12
    • 1970-01-01
    • 1970-01-01
    • 2017-08-03
    • 2017-05-17
    相关资源
    最近更新 更多