반응형

출처

https://stackoverflow.com/questions/7749530/what-is-the-difference-between-and-in-scala/7749570

스칼라에서 \=:=의 차이점은 무엇입니까?

스칼라에서 \=:=의 차이점은 무엇입니까?

저는 "스칼라 :=(콜론 이퀄)"에 관해 광범위하게 구글링 해보았지만 결정적인 어떤 것도 찾지 못했습니다.


4개의 답변 중 1개의 답변

스칼라에서 =는 실제 대입 연산자입니다. 몇 가지 특정 작업을 수행하지만 다음과 같은 대부분의 경우 제어할(다시 정의할) 권한이 없습니다.

  • 생성할 때 val 또는 var 형태의 값을 제공

  • var 의 값을 변경

  • 클래스에서 필드의 값을 변경

  • type alias를 생성

  • 아마 다른 것들

:=는 내장된(build-in) 연산이 아닙니다. 누구든 원하는 대로 의미를 정의하고 오버로딩할 수 있습니다. :=를 사용하기 좋아하는 이유는 매우 대입 연산자처럼 보이고 다른 언어에서 대입 연산자로 사용하고 있기 때문입니다.

그래서 당신이 사용하고 있는 라이브러리에서 :=가 뜻하는 것을 찾아보는 시도가 필요합니다. := 이름의 메소드를 Scaladocs(만약 있다면)를 통해 살펴보시는 것을 권유합니다.

반응형
반응형

출처

https://stackoverflow.com/questions/7938585/what-does-param-mean-in-scala


스칼라에서 파라미터:_* 는 무엇을 뜻합니까?

스칼라(2.9.1)로 새로워지면서, List[Event]가 있고 이를 Queue[Event]로 복사하고 싶습니다. 하지만 다음 문법은 대신에 Queue[List[Event]]를 yield 합니다. 

val eventQueue = Queue(events)

이러한 이유로 다음은 작동합니다.

val eventQueue = Queue(events : _*)

하지만 저는 이것이 무엇인지 왜 작동 하는지 이해하고 싶습니다. Queue.apply 함수의 signature를 이미 보았습니다.

def apply[A](elems: A*)

그리고 저는 첫 번째 시도가 왜 작동하지 않는지와 두 번째(_*)의 의미가 무엇인지 이해하고 싶습니다. 이 경우 :와 _*는 무엇입니까? 그리고 왜 apply함수는 Iterable[A]를 취하지 않는 것입니까?

이 발생할 것입니다.

1개의 답변만 발췌

a: A는 타입 선언(ascription)입니다. 스칼라에서 타입 선언(ascriptions)의 목적은 무엇입니까? 라는 글을 보세요.

: _*는 가변 인자 시퀀스로 시퀀스 타입을 하나의 인수로 취급 하겠다고 컴파일러에게 알리는 타입 선언(ascription)의 특별한 인스턴스 입니다.

시퀀스나 iterable한 하나의 요소를 가지는 Queue.apply를 사용한 Queue를 생성하는 것은 완전히 유효합니다. 그래서 이는 하나의 Iterable[A]가 주어질 때 정확히 발생합니다.

반응형
반응형

출처

https://stackoverflow.com/questions/30674376/apache-spark-get-elements-of-row-by-name


Apache Spark: Row의 element값을 이름으로 얻기

Apache Spark(저는 Scala 인터페이스를 사용합니다)의 DataFrame 객체에서, 객체를 순회한다고 했을 때 이름으로 값들을 추출하는 방법이 있을까요? 저는 정말 어색한 방법으로 이 작업을 했습니다.

def foo(r: Row) = {
  val ix = (0 until r.schema.length).map( i => r.schema(i).name -> i).toMap
  val field1 = r.getString(ix("field1"))
  val field2 = r.getLong(ix("field2"))
  ...
}
dataframe.map(foo)

저는 더 좋은 방법이 있을 것이라 생각합니다. 제 작업은 매우 장황한 방법입니다. 이는 추가 구조를 만들어야 하고 명시적으로 type도 알아야 합니다. 만약 타입이 틀리면 프로그램은 compile-time 오류보다 실행시 exception이 발생할 것입니다.

1개의 답변만 발췌

당신은 org.apache.spark.sql.Row로부터 "getAs"를 사용할 수 있습니다.

r.getAs("field1")
r.getAs("field2")

getAs(java.lang.String fieldName) 관해 링크를 클릭하시면 더 아실 수 있습니다.

반응형

+ Recent posts