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

Spark-将矢量数据拆分、转换和存储到CSV文件中

吕英才
2023-03-14
+--------------------+-----+-----------+
|            features|Label|OutputLabel|
+--------------------+-----+-----------+
|(1133,[33,296,107...|    0|        0.0|
|(1133,[19,1045,10...|    0|        0.0|
|(1133,[9,398,1075...|    0|        0.0|
|(1133,[0,927,1074...|    0|        0.0|
|(1133,[41,223,107...|    0|        0.0|
|(1133,[70,285,108...|    0|        0.0|
|(1133,[4,212,1074...|    0|        0.0|
|(1133,[25,261,107...|    0|        0.0|
|(1133,[0,258,1074...|    0|        0.0|
|(1133,[2,219,1074...|    0|        0.0|
|(1133,[8,720,1074...|    0|        0.0|
|(1133,[2,260,1074...|    0|        0.0|
|(1133,[54,348,107...|    0|        0.0|
|(1133,[167,859,10...|    0|        0.0|
|(1133,[1,291,1074...|    0|        0.0|
|(1133,[1,211,1074...|    0|        0.0|
|(1133,[23,216,107...|    0|        0.0|
|(1133,[126,209,11...|    0|        0.0|
|(1133,[70,285,108...|    0|        0.0|
|(1133,[96,417,107...|    0|        0.0|
+--------------------+-----+-----------+

请看下面这个数据文件的架构

root
 |-- features: vector (nullable = true)
 |-- Label: integer (nullable = true)
 |-- OutputLabel: double (nullable = true)

>

  • 问题1:我需要将第一列数据分成两列,这样整数数据应该在一列中,数组数据应该在另一列中。不确定如何在Spark/Scala中实现?任何关于这一点的指示都将是有帮助的。

    当我试图将此数据文件写入csv文件时,我得到了以下错误

  • 共有1个答案

    杜翰林
    2023-03-14

    那么,在将第一列拆分为两个单独的列之后,是否可以写入此数据文件?

    不,您看到的只是sparsevector的一个表示。即使提取索引和值,CSV源代码也只支持原子类型。

    如果您对使用CSV一心一意,我会将整个列转换为JSON

    import org.apache.spark.ml.linalg.Vectors
    import org.apache.spark.sql.functions._
    
    val df = sc.parallelize(Seq(
      (Vectors.sparse(100, Array(1, 11, 42), Array(1, 2, 3)), 0, 0.0)
    )).toDF("features", "label", "outputlabel")
    
    df.withColumn("features", to_json(struct($"features"))).write.csv(...)
    
     类似资料:
    • 我有一个程序,期待一个csv文件,并用python编写。 假设csv数据来自scala,scala使用spark功能存储源数据并存储到temp表中,如下所示。

    • 问题内容: 有没有办法将NumPy数组转储到CSV文件中?我有一个2D NumPy数组,需要以人类可读的格式转储它。 问题答案: 将数组保存到文本文件。

    • 我正在处理一个包含uni_key和createdDate两列的数据帧。我运行一个SQL查询并将结果保存到中,现在我想将这些结果保存到csv文件中。有什么方法可以做到这一点吗?这是一个代码片段: 此代码当前出现以下错误: AttributeError:“DataFrameWriter”对象没有属性“csv”

    • 问题内容: 我设法根据逗号分割了CSV文件。我通过将虚拟字符串放置在有’,’的位置,然后根据虚拟字符串进行拆分来完成此操作。 但是,CSV文件包含以下内容: 因此,在有新行的地方,每行的最后一个值和第一个值合并到自己的字符串中。我该如何解决?我试图将我的虚拟字符串放置在此处,但据此将其拆分,但没有成功。 救命?! 问题答案: 我强烈建议您不要重新发明轮子:)。使用一个已经可用的库来处理CSV文件,

    • 有人能给我提供一个使用Spark2.2选项将csv文件保存到Hbase表的工作示例吗?我尝试过但失败了(注意:所有这些选项都适用于Spark1.6) 凤凰-火花 HBase-Spark it.nerdammer.bigdata:spark-hbase-connector2.10 所有这些最终都在修复一切后给出了类似的错误,这个火花HBase 谢谢