pyspark 与 scala 中的 FPgrowth 计算关联

2023-12-10

Using :

http://spark.apache.org/docs/1.6.1/mllib-frequent-pattern-mining.html

Python代码:

from pyspark.mllib.fpm import FPGrowth
model = FPGrowth.train(dataframe,0.01,10)

Scala:

import org.apache.spark.mllib.fpm.FPGrowth
import org.apache.spark.rdd.RDD

val data = sc.textFile("data/mllib/sample_fpgrowth.txt")

val transactions: RDD[Array[String]] = data.map(s => s.trim.split(' '))

val fpg = new FPGrowth()
  .setMinSupport(0.2)
  .setNumPartitions(10)
val model = fpg.run(transactions)

model.freqItemsets.collect().foreach { itemset =>
  println(itemset.items.mkString("[", ",", "]") + ", " + itemset.freq)
}

val minConfidence = 0.8
model.generateAssociationRules(minConfidence).collect().foreach { rule =>
  println(
    rule.antecedent.mkString("[", ",", "]")
      + " => " + rule.consequent .mkString("[", ",", "]")
      + ", " + rule.confidence)
}

来自代码here它表明 scala 部分没有最低置信度。

def trainFPGrowthModel(
      data: JavaRDD[java.lang.Iterable[Any]],
      minSupport: Double,
      numPartitions: Int): FPGrowthModel[Any] = {
    val fpg = new FPGrowth()
      .setMinSupport(minSupport)
      .setNumPartitions(numPartitions)

    val model = fpg.run(data.rdd.map(_.asScala.toArray))
    new FPGrowthModelWrapper(model)
  }

pyspark如何添加minConfidence来生成关联规则?我们可以看到scala有这个例子,而python没有这个例子。


火花 >= 2.2

有一个DataFrame base ml提供的APIAssociationRules:

from pyspark.ml.fpm import FPGrowth

data = ...

fpm = FPGrowth(minSupport=0.3, minConfidence=0.9).fit(data)
associationRules = fpm.associationRules.

火花

目前PySpark不支持提取关联规则(DataFrame based FPGrowth支持 Python 的 API 正在进行中SPARK-1450)但我们可以轻松解决这个问题。

首先你必须安装 SBT(只需下载页面)并按照适用于您的操作系统的说明进行操作。

接下来,您必须创建一个仅包含两个文件的简单 Scala 项目:

.
├── AssociationRulesExtractor.scala
└── build.sbt

您可以稍后调整以遵循建立的目录结构.

接下来将以下内容添加到build.sbt(调整 Scala 版本和 Spark 版本以匹配您使用的版本):

name := "fpm"

version := "1.0"

scalaVersion := "2.10.6"

val sparkVersion = "1.6.2"

libraryDependencies ++= Seq(
  "org.apache.spark" %% "spark-core" % sparkVersion,
  "org.apache.spark" %% "spark-mllib" % sparkVersion
)

并遵循AssociationRulesExtractor.scala:

package com.example.fpm

import org.apache.spark.mllib.fpm.AssociationRules.Rule
import org.apache.spark.rdd.RDD

object AssociationRulesExtractor {
  def apply(rdd: RDD[Rule[String]]) = {
    rdd.map(rule => Array(
      rule.confidence, rule.javaAntecedent, rule.javaConsequent
    ))
  }
}

打开您选择的终端模拟器,转到项目的根目录并调用:

sbt package

它会在目标目录中生成一个jar文件。例如在 Scala 2.10 中它将是:

target/scala-2.10/fpm_2.10-1.0.jar

启动 PySpark shell 或使用spark-submit并将路径传递给生成的 jar 文件--driver-class-path:

bin/pyspark --driver-class-path /path/to/fpm_2.10-1.0.jar

非本地模式下:

bin/pyspark --driver-class-path /path/to/fpm_2.10-1.0.jar --jars /path/to/fpm_2.10-1.0.jar

在集群模式下,jar 应该存在于所有节点上。

添加一些方便的包装:

from pyspark import SparkContext
from pyspark.mllib.fpm import FPGrowthModel
from pyspark.mllib.common import _java2py
from collections import namedtuple


rule = namedtuple("Rule", ["confidence", "antecedent", "consequent"])

def generateAssociationRules(model, minConfidence):
    # Get active context
    sc = SparkContext.getOrCreate()

    # Retrieve extractor object
    extractor = sc._gateway.jvm.com.example.fpm.AssociationRulesExtractor

    # Compute rules
    java_rules = model._java_model.generateAssociationRules(minConfidence)

    # Convert rules to Python RDD
    return _java2py(sc, extractor.apply(java_rules)).map(lambda x:rule(*x))

最后,您可以将这些助手用作函数:

generateAssociationRules(model, 0.9)

或作为一种方法:

FPGrowthModel.generateAssociationRules = generateAssociationRules
model.generateAssociationRules(0.9)

此解决方案依赖于内部 PySpark 方法,因此不能保证它在版本之间可移植。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

pyspark 与 scala 中的 FPgrowth 计算关联 的相关文章

随机推荐

  • Opencover 可以与 TypeMock 隔离器一起使用吗?

    我正在寻找一个 NET 覆盖工具 并且一直在尝试 PartCover 但取得了不同程度的成功 我看到开盖旨在取代 PartCover 但到目前为止我无法将其与 TypeMock Isolator 链接 因此我的模拟测试在收集覆盖信息时通过
  • 如何着手创建一款赛道游戏? [关闭]

    Closed 这个问题需要多问focused 目前不接受答案 我计划在 Android 中制作赛车游戏 我已经使用不同的移动技术创建了许多应用程序 但我对游戏应用来说几乎是初学者 所以我的问题是如何在 android 中制作赛道 我应该如何
  • Android 中的 SQL 查询 - 搜索整个或部分字符串

    我对 SQL 查询没有太多经验 所以在找到问题的解决方案时遇到了一些麻烦 我有一个书签列表 例如 Facebook 开发者控制台 Stack Overflow 我还有他们的 URL 列表 http m facebook com https
  • 如何通过javascript获取值translateX

    使用 JavaScript 初始化内容元素 content children 0 style transform translateX 200 px scaleX 1 6 scaleY 1 2 如何获取该元素的translateX 值 您可
  • Python 中的 NZEC 错误

    这是一段简单的代码 假设读取 n 个数字并打印这 n 个数字中有多少个数字可以被 k 整除 n int raw input k int raw input ans 0 while n gt 0 t int raw input if t k
  • Codeigniter连接查询多个条件不起作用

    我想使用连接查询从数据库表中选择数据 但它不起作用 我的查询 this gt db gt select this gt db gt from we this gt db gt join schedule schedule itemid we
  • 如何在Python中从一组线性方程中绘制平面?

    我有一个包含三个方程的线性系统 x1 2x2 x3 0 2x2 8x3 8 4x1 5x2 9x3 9 解集是 29 16 3 它是这些平面相交处的点 希望有人可以使用 Matplotlib 在 3D 空间中绘制这些平面 以便清楚地可视化问
  • 屏蔽文本框验证文本错误

    我在处理从 WinForms 应用程序上的屏蔽文本框提取的日期变量时遇到一些问题 尝试读取用户输入日期的代码如下 DateTime datExpDate new DateTime datExpDate DateTime txtExpDate
  • System.IO.DirectoryInfo.Exists 有其他选择吗

    The System IO DirectoryInfo Exists如果我给出这样的 UNC 总是返回 false 192 168 0 33 Others F 仅当我从已安装的应用程序运行时才会发生这种情况 否则如果路径为真 它将返回 tr
  • 应用程序文档目录的物理路径

    应用程序文档目录的物理路径是什么 在 Mac OS X Lion 上 我知道该文件夹中的每个应用程序都有 UUID 但直到现在才在我的系统上找到它 Open 用户 用户名 库 应用程序支持 iPhone 模拟器 4 3 2 应用程序 假设使
  • 多分区作业的批处理脚本?

    我正在开发一个项目 该项目在大型计算集群的两个不同分区上运行程序 我想使用批处理脚本来运行它 但搜索后 仍然不清楚是否 如何从单个批处理脚本中在两个不同的分区上分配和运行程序 这就是我想做的事情 bin bash SBATCH partit
  • ajax 在 Flask 视图中发布数据

    这是我的视图功能 app route share methods GET POST def share form ShareForm request form if request method POST title form title
  • 如何计算包含特定值的 XML 节点的数量

    我正在寻找如何计算 XML 文件中包含 否 值的节点以及元素总数 我的元素计数工作正常 但我不确定在 XML 内部查找要计数的值的逻辑 为了获得我正在使用的总数 XmlDocument readDoc new XmlDocument rea
  • 如何在 beforeload 事件中获取 Extjs 4 商店的请求数据?

    我正在尝试在商店加载事件之前获取请求数据参数 我可以看到操作对象包含请求数据 但我似乎无法从操作对象获取它 Ext create Ext data Store autoLoad true fields name item code type
  • 如何使用 luasql 创建 Sqlite3 数据库?

    我正在尝试使用 luasql 创建 Sqlite3 数据库 之后我requireluasql sqlite3 如何在文件上创建数据库 另外 我似乎找不到 luasql 的手册 任何地方都可以使用吗 如果数据库不存在 SQLite 将自动创建
  • 在 Windows 批处理中转义特殊字符

    我有一个批处理文件 它接收路径作为第一个参数 该路径始终由特殊字符组成 例如 or 调用类似于这样 D Script gt MyBatch My path test 00170 LASTNAME Firstname image 总是出现这个
  • 我当前在 Eclipse MacOS Big Sur 上进行 GDB 调试时遇到错误

    在 Big Sur 上通过 Homebrew 安装 GDB 后 我目前遇到了一个奇怪的错误 我已经正确配置了 Eclipse 的所有内容 我的 GDB 链接为调试器 但是 每次我尝试启动调试时 都没有任何反应 并且控制台中出现以下内容 00
  • e.keyCode 不起作用

    我想问你一些对我不起作用的事情 如果你能帮助我的话 Html
  • 在 Inno Setup Run 部分命令中扩展 .NET 路径常量时的错误处理/忽略

    我有一个 NET DLL 可以通过以下方式注册RegAsm NET 3 5 和 NET 4 5 我在我的设置脚本中使用以下代码 Run Filename dotnet40 RegAsm exe Parameters my dll Worki
  • pyspark 与 scala 中的 FPgrowth 计算关联

    Using http spark apache org docs 1 6 1 mllib frequent pattern mining html Python代码 from pyspark mllib fpm import FPGrowt