Skip to content

Conversation

@pravingadakh
Copy link
Contributor

What changes were proposed in this pull request?

This PR adds accessor methods for pipeline stages in Pipeline and PipelineModel classes.


@jkbradley Hi, please validate if this is something that you had in mind. If so, I can start on test cases for these.

@jkbradley
Copy link
Member

test this please

@SparkQA
Copy link

SparkQA commented Apr 20, 2016

Test build #56401 has finished for PR 12420 at commit a4592c6.

  • This patch fails to build.
  • This patch merges cleanly.
  • This patch adds no public classes.

@jkbradley
Copy link
Member

@pravingadakh Thanks! This is what I had in mind. In your tests, could you please add Java unit tests too to make sure these are Java-friendly?

Also, please check the type and throw exceptions when the type does not match. I'd recommend throwing IllegalArgumentException and specifying the expected and actual types.


/** Returns stage at index i in Pipeline */
@Since("2.0.0")
def getStage[T <: PipelineStage](i: Int): T = getStages.apply(i).asInstanceOf[T]
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Here and elsewhere, I would just write array(i) instead of array.apply(i)

Also, can you please document the @tparam?

@pravingadakh
Copy link
Contributor Author

@jkbradley I'll update the PR accordingly.

@jkbradley
Copy link
Member

By the way, we'll need to get this merged quickly for it to make 2.0. (Thanks!)

@pravingadakh
Copy link
Contributor Author

@jkbradley I'll update it soon.

@pravingadakh
Copy link
Contributor Author

@jkbradley I have stumbled across an issue, would really appreciate your input. Have a look at this method:

def getStage[T <: PipelineStage : ClassTag](i: Int): T = {
    getStages(i) match {
      case stage: T => stage
      case stage => throw new IllegalArgumentException(
        s"Expected stage of type ${stage.getClass.getName}"
      )
    }
  }

How do I avoid usage of ClassTag here (since those are not so java friendly)? Also I'm a bit skeptical about the error message.

@AmplabJenkins
Copy link

Can one of the admins verify this patch?

def getStages: Array[PipelineStage] = $(stages).clone()

/** Returns stage at index i in Pipeline */
@Since("2.0.0")
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can't be since 2.0.0 at this point. Also use a @return tag in the docs.

/** Returns all stages of this type */
@Since("2.0.0")
def getStagesOfType[T <: PipelineStage]: Array[T] = {
getStages.collect {
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nit: This is probably more natural as a one-liner

@jkbradley
Copy link
Member

@pravingadakh Will you be able to continue with this? Thanks!

@jkbradley
Copy link
Member

I missed the ClassTag question above. Let me take a look

@jkbradley
Copy link
Member

Well, after spending a while looking around, I haven't found a good way to write this and make it Java friendly (i.e., not use ClassTag, Type, or TypeTag). Does anyone else have ideas? I'll try to return to this before long...

@HyukjinKwon
Copy link
Member

Hi @@pravingadakh, is this still active?

@asfgit asfgit closed this in 5d2750a May 18, 2017
@pravingadakh pravingadakh deleted the SPARK-14585 branch July 24, 2017 18:50
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants