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

如何使用Array[Int]将csv文件加载到Spark DataFrame中

慕容齐智
2023-03-14

csv文件中的每一行结构如下:

u001, 2013-11, 0, 1, 2, ... , 99
+-------+-------------+-----------------+
|    uid|         date|       dataVector|
+-------+-------------+-----------------+
|   u001|      2013-11|  [0,1,...,98,99]|
|   u002|      2013-11| [1,2,...,99,100]|
+-------+-------------+-----------------+

root
 |-- uid: string (nullable = true)
 |-- date: string (nullable = true)
 |-- dataVecotr: array (nullable = true)
 |    |-- element: integer (containsNull = true)
val attributes = Array("uid", "date", "dataVector)
val schema = StructType(
StructField(attributes(0), StringType, true) ::
StructField(attributes(1), StringType, true) ::
StructField(attributes(2), ArrayType(IntegerType), true) :: 
Nil)
 root
  |-- uid: string (nullable = true)
  |-- date: string (nullable = true)
  |-- dataVector: struct (nullable = true)
  |    |-- _c3: string (containsNull = true)
  |    |-- _c4: string (containsNull = true)
  .
  .
  .
  |    |-- _c101: string (containsNull = true)

共有1个答案

高化
2023-03-14

加载它而不添加任何内容

val df = spark.read.csv(path)

并选择:

import org.apache.spark.sql.functions._
import org.apache.spark.sql.Column

// Combine data into array
val dataVector: Column = array(
  df.columns.drop(2).map(col): _*  // Skip first 2 columns
).cast("array<int>")  // Cast to the required type
val cols: Array[Column] = df.columns.take(2).map(col) :+ dataVector

df.select(cols: _*).toDF("uid", "date", "dataVector")
 类似资料:
  • 问题内容: 在angularjs中,我创建了一些加载JSON对象的对象: 在控制器中,我可以这样称呼它: 如您所见,我正在加载文件。 对文件执行相同的处理流程是什么? 在我的情况下 是对象列表。 有人知道如何使用或其他方式获取CSV数据吗? 问题答案: 您必须将CSV文件解析为一个数组。您可以在其他替代方法中看到此问题 然后,您将得到如下结果:

  • 问题内容: 我想在数据库中使用csv文件 问题答案: 由于SQLAlchemy的强大功能,我还在项目中使用了它。它的强大功能来自于与数据库“对话”的面向对象的方式,而不是硬编码难以管理的SQL语句。更不用说,它也快很多。 坦率地回答您的问题,是的!使用SQLAlchemy将数据从CSV存储到数据库中简直是小菜一碟。这是一个完整的工作示例(我使用了SQLAlchemy 1.0.6和Python 2.

  • 我是Spark的新手,我正在尝试使用Spark从文件中读取CSV数据。以下是我正在做的: 我希望这个调用会给我一个文件前两列的列表,但我遇到了以下错误: 索引器中第1行的文件“”:列表索引超出范围 虽然我的CSV文件不止一列。

  • 问题内容: 我正在使用Selenium WebDriver尝试将外部javascript文件插入DOM中,而不是将整个内容键入到executeScript中。 看起来好像已将节点正确放置到DOM中,但是随后它只是忽略了源代码,即,所述源js文件上的函数未运行。 这是我的代码: 我链接到的javascript文件的代码是 我已将js文件放在本地主机上,使用file:///进行了调用,并在外部服务器上

  • 我使用Selenium WebDriver尝试将外部javascript文件插入到DOM中,而不是将整个文件输入到Executescript中。 它看起来像是正确地将节点放入了DOM,但它只是忽略了源,即源js文件上的函数不运行。 下面是我的代码: 我链接到的javascript文件的代码是 我将js文件放在本地主机上,使用file:///调用它,并在外部服务器上进行了尝试。没有骰子。 我还尝试了

  • 问题内容: 我正在尝试从外部文件加载HTML并将文件的内容插入。 当我运行该函数时,它将HTML插入所有正文中,这是不够的。 我的代码: --------------------------> HTML <--------------------- ----- --------------------------> CSS <--------------------- ----- --------