2016-09-13 8 views
1

Sparkの新機能 scalaまたはSparkのDouble値とInt値のNull値を確認する方法を教えてください。文字列のためのと同じように私たちは、このようSparkのDouble/Int値のヌルチェック

を行うことができます。

val value = (FirstString.isEmpty()) match { 
      case true => SecondString 
      case _ => FirstString 
     } 

私はそれのために多くのことを探索したが、私は文字列値だけ件見つかりました。他のデータ型についても私に提案してください。

ありがとうございます。

答えて

3

Optionを簡単に使用できますか?だから、のような:

val d: Double = ... 

val isNull = Option(d).isDefined 

それとも、パターンマッチングを使用することができます。

val d: Double = ... 

Option(d) match { 
    case Some(v) => use v 
    case _ => you got Null 
} 
+5

これは無意味です:あなたはスパークについて、具体的 Sを話している場合は、Int/Double /その他のプリミティブな値を取得前にヌルをチェックする必要がある 'Double'理由nullにすることはできません。 'Option(d)'は常に 'Some'です。 '...'のコードが 'Double'に評価されるのではなく' java.lang.Double'(nullでもよい)に評価された場合、その行で例外が発生します。 –

+0

@AlexeyRomanovありがとう、その良い点。 – leshkin

2

nullは(すなわち非プリミティブ型)ScalaではタイプAnyRefにのみ適用されます。 AnyValタイプはnullに設定できません。例えば

// the below are AnyVal(s) and wont compile 
val c: Char = null 
val i: Int = null 
val d: Double = null 

文字列AnyRefですので、nullにすることができます

// this is ok! 
val c: String = null 

/ダブルタイプをintにヌルをパターンマッチングができない理由ですそれ:

// wont compile! 
null match { 
     case a:Int => "is a null Int" 
     case _ => "something else" 
     } 
3

isEmptyは、「check for null」とまったく同じではありません。 nullisEmptyを呼び出すと失敗します。

val s: String = null 
s.isEmpty // throws NullPointerException 

IntDoubleは(どちらも、他のプリミティブ型缶)nullにすることはできませんので、彼らがしているかどうかをチェックする必要はありません。

It is invalid to use the native primitive interface to retrieve a value that is null, instead a user must check isNullAt before attempting to retrieve a value that might be null.

関連する問題