【问题标题】:Converting numpy array to spark dataframe to input into MySQL (pyspark)将 numpy 数组转换为 spark 数据帧以输入 MySQL (pyspark)
【发布时间】:2018-01-17 21:05:48
【问题描述】:

使用 JDBC 驱动程序,我能够将存储在 MySQL 中的数据表提取到 spark 数据帧中。

然后我从 pyspark mllib 在数据帧上运行 Statistic corr 函数(经过一些转换后),并能够获得类似于以下的相关矩阵(类型 numpy.ndarray):

[[1.0, 0.95, 0.77], [0.95, 1.0, 0.34], [0.77, 0.34, 1.0]]

如何获取这个矩阵并创建一个如下所示的数据框,以便我可以将其输入回 MySQL:

                Attribute 1   Attribute 2  Attribute 3
    Attribute 1     1.0          0.95          0.77
    Attribute 2     0.95         1.0           0.34
    Attribute 3     0.77         0.34          1.0

任何帮助都会很棒!

【问题讨论】:

  • 澄清一下,Statistics corr 函数返回的数组类型是一个numpy.ndarray。这似乎对数据框架构的制定方式产生了影响。

标签: python numpy apache-spark pyspark spark-dataframe


【解决方案1】:

实际上有多种方法可以将数据保存回 MySQL。这是一种方法:

import pandas as pd

corr_matrix = pd.DataFrame([[1.0, 0.95, 0.77], [0.95, 1.0, 0.34], [0.77, 0.34, 1.0]])
df = spark.createDataFrame(corr_matrix, schema=['Att 1', 'Att 2', 'Att 3'])

df.write.jdbc(url, table)

其中 url 是 JDBC URL,table 是外部数据库中的表名

【讨论】:

  • 如果我已经有一个具有我想要的架构的现有数据框,我可以利用它而不是再次手动重新输入它吗?如果是这样,我将如何去做。这将有助于使我的代码更加灵活。谢谢!
  • 我尝试在上面实施您的解决方案,但收到以下错误消息:'无法推断类型的架构:
  • 它似乎无法推断您的类型,因为它仍然是一个 numpy 数组。 Spark DF 需要 RDD、元组、列表或 pandas DF。因此,一种方法是例如使用 pandas DF(请参阅已编辑的解决方案)。另一种方法是将 numpy 数组转换为列表。是的,您可以将现有数据框与架构一起使用。为此,请查看文档。我已经用spark.createDataFrame给了你一个很好的提示。
猜你喜欢
  • 1970-01-01
  • 2022-08-12
  • 1970-01-01
  • 2023-04-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-08
  • 2022-10-25
相关资源
最近更新 更多