Github user mengxr commented on a diff in the pull request:
https://github.com/apache/spark/pull/9469#discussion_r43904779
--- Diff: python/pyspark/mllib/fpm.py ---
@@ -85,6 +85,72 @@ class FreqItemset(namedtuple("FreqItemset", ["items",
"freq"])):
"""
+@inherit_doc
+@ignore_unicode_prefix
+class PrefixSpanModel(JavaModelWrapper):
+ """
+ .. note:: Experimental
+
+ Model fitted by PrefixSpan
+
+ >>> data = [
+ ... [["a", "b"], ["c"]],
+ ... [["a"], ["c", "b"], ["a", "b"]],
+ ... [["a", "b"], ["e"]],
+ ... [["f"]]]
+ >>> rdd = sc.parallelize(data, 2)
+ >>> model = PrefixSpan.train(rdd)
+ >>> sorted(model.freqSequences().collect())
+ [FreqSequences(sequence=[[u'a']], freq=3),
FreqSequences(sequence=[[u'a'], [u'a']], freq=1), ...
+
+ .. versionadded:: 1.6.0
+ """
+
+ @since("1.6.0")
+ def freqSequences(self):
+ """Gets frequence sequences"""
+ return self.call("getFreqSequences").map(lambda x:
PrefixSpan.FreqSequences(x[0], x[1]))
+
+
+class PrefixSpan(object):
+ """
+ .. note:: Experimental
+
+ A parallel PrefixSpan algorithm to mine frequent sequential patterns.
+ The PrefixSpan algorithm is described in J. Pei, et al., PrefixSpan:
Mining Sequential Patterns
+ Efficiently by Prefix-Projected Pattern Growth
([[http://doi.org/10.1109/ICDE.2001.914830]]).
+
+ .. versionadded:: 1.6.0
+ """
+
+ @classmethod
+ @since("1.6.0")
+ def train(cls, data, minSupport=0.1, maxPatternLength=10,
maxLocalProjDBSize=32000000):
+ """
+ Finds the complete set of frequent sequential patterns in the
input sequences of itemsets.
+
+ :param data: The input data set, each element contains a sequnce
of itemsets.
+ :param minSupport: the minimal support level of the sequential
pattern, any pattern appears
+ more than (minSupport * size-of-the-dataset) times will be
output (default: `0.1`)
+ :param maxPatternLength: the maximal length of the sequential
pattern, any pattern appears
+ less than maxPatternLength will be output. (default: `10`)
+ :param maxLocalProjDBSize: The maximum number of items (including
delimiters used in
+ the internal storage format) allowed in a projected database
before local
+ processing. If a projected database exceeds this size, another
+ iteration of distributed prefix growth is run. (default:
`32000000`)
+ """
+ model = callMLlibFunc("trainPrefixSpanModel",
+ data, minSupport, maxPatternLength,
maxLocalProjDBSize)
+ return PrefixSpanModel(model)
+
+ class FreqSequences(namedtuple("FreqSequences", ["sequence", "freq"])):
--- End diff --
`FreqSequences` -> `FreqSequence` to match Scala
---
If your project is set up for it, you can reply to this email and have your
reply appear on GitHub as well. If your project does not have this feature
enabled and wishes so, or if the feature is enabled but not working, please
contact infrastructure at [email protected] or file a JIRA ticket
with INFRA.
---
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]