You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@mahout.apache.org by "Andrew Palumbo (JIRA)" <ji...@apache.org> on 2014/09/14 18:17:34 UTC
[jira] [Comment Edited] (MAHOUT-1615) SparkEngine drmFromHDFS
returning the same Key for all Key,Vec Pairs for Text-Keyed SequenceFiles
[ https://issues.apache.org/jira/browse/MAHOUT-1615?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14133255#comment-14133255 ]
Andrew Palumbo edited comment on MAHOUT-1615 at 9/14/14 4:16 PM:
-----------------------------------------------------------------
It looks like it has something to do with Spark reusing Objects in partitions. If I change the minPartitions to 1 I only get a single Key:
{code}
mahout> val rdd = sdc.sequenceFile(path = "/tmp/mahout-work-andy/20news-test-vectors/part-r-00000", classOf[Writable], classOf[Writable], minPartitions = 1)
mahout> val keyVec = rdd.map(_._1).collect.distinct
keyVec: Array[org.apache.hadoop.io.Writable] = Array(/talk.religion.misc/84570)
mahout> keyVec.size
res1: Int = 1
{code}
and increasing minPartitions to 1000 gives:
{code}
mahout> val rdd = sdc.sequenceFile(path = "/tmp/mahout-work-andy/20news-test-vectors/part-r-00000", classOf[Writable], classOf[Writable], minPartitions = 1000)
rdd: org.apache.spark.rdd.RDD[(org.apache.hadoop.io.Writable, org.apache.hadoop.io.Writable)] = HadoopRDD[9] at sequenceFile at <console>:35
mahout> val keyVec = rdd.map(_._1).collect.distinct
keyVec: Array[org.apache.hadoop.io.Writable] = Array(/alt.atheism/51146, /alt.atheism/51157, /alt.atheism/51188, /alt.atheism/51212, /alt.atheism/51222, /alt.atheism/51239, /alt.atheism/51244, /alt.atheism/51275, /alt.atheism/51284, /alt.atheism/51298, /alt.atheism/53055, /alt.atheism/53090, /alt.atheism/53113, /alt.atheism/53140, /alt.atheism/53178, /alt.atheism/53203, /alt.atheism/53221, /alt.atheism/53248, /alt.atheism/53274, /alt.atheism/53305, /alt.atheism/53325, /alt.atheism/53333, /alt.atheism/53347, /alt.atheism/53376, /alt.atheism/53412, /alt.atheism/53436, /alt.atheism/53458, /alt.atheism/53487, /alt.atheism/53515, /alt.atheism/53541, /alt.atheism/53579, /alt.atheism/53600, /alt.atheism/53632, /alt.atheism/53673, /alt.atheism/53759, /alt.atheism/53792, /alt.atheism/54127, /alt...
mahout> keyVec.size
res2: Int =
{code}
the suggested fix is:
{code}
rdd.map(_.clone).cache
{code}
though i'm getting an error:
{code}
Access to protected method clone not permitted because
prefix type (org.apache.hadoop.io.Writable, org.apache.hadoop.io.Writable) does not conform to
class $iwC where the access take place
{code}
when I try this.
was (Author: andrew_palumbo):
It looks like it has something to do with Spark reusing Objects in partitions. If I change the minPartitions to 1 I only get a single Key:
{code}
mahout> val rdd = sdc.sequenceFile(path = "/tmp/mahout-work-andy/20news-test-vectors/part-r-00000", classOf[Writable], classOf[Writable], minPartitions = 1)
mahout> val keyVec = rdd.map(_._1).collect.distinct
keyVec: Array[org.apache.hadoop.io.Writable] = Array(/talk.religion.misc/84570)
mahout> keyVec.size
res1: Int = 1
{code}
the suggested fix is:
{code}
rdd.map(_.clone).cache
{code}
though i'm getting an error:
{code}
Access to protected method clone not permitted because
prefix type (org.apache.hadoop.io.Writable, org.apache.hadoop.io.Writable) does not conform to
class $iwC where the access take place
{code}
when I try this.
> SparkEngine drmFromHDFS returning the same Key for all Key,Vec Pairs for Text-Keyed SequenceFiles
> -------------------------------------------------------------------------------------------------
>
> Key: MAHOUT-1615
> URL: https://issues.apache.org/jira/browse/MAHOUT-1615
> Project: Mahout
> Issue Type: Bug
> Reporter: Andrew Palumbo
> Fix For: 1.0
>
>
> When reading in seq2sparse output from HDFS in the spark-shell of form <Text,VectorWriteable> SparkEngine's drmFromHDFS method is creating rdds with the same Key for all Pairs:
> {code}
> mahout> val drmTFIDF= drmFromHDFS( path = "/tmp/mahout-work-andy/20news-test-vectors/part-r-00000")
> {code}
> Has keys:
> {...}
> key: /talk.religion.misc/84570
> key: /talk.religion.misc/84570
> key: /talk.religion.misc/84570
> {...}
> for the entire set. This is the last Key in the set.
> The problem can be traced to the first line of drmFromHDFS(...) in SparkEngine.scala:
> {code}
> val rdd = sc.sequenceFile(path, classOf[Writable], classOf[VectorWritable], minPartitions = parMin)
> // Get rid of VectorWritable
> .map(t => (t._1, t._2.get()))
> {code}
> which gives the same key for all t._1.
>
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)