标签: nullable

SparkSQL:如何处理用户定义函数中的空值?

给定表1,其中一列为"x",类型为String.我想创建表2,其中列为"y",它是"x"中给出的日期字符串的整数表示形式.

必不可少的是将null值保留在"y"列中.

表1(数据帧df1):

+----------+
|         x|
+----------+
|2015-09-12|
|2015-09-13|
|      null|
|      null|
+----------+
root
 |-- x: string (nullable = true)
Run Code Online (Sandbox Code Playgroud)

表2(数据帧df2):

+----------+--------+                                                                  
|         x|       y|
+----------+--------+
|      null|    null|
|      null|    null|
|2015-09-12|20150912|
|2015-09-13|20150913|
+----------+--------+
root
 |-- x: string (nullable = true)
 |-- y: integer (nullable = true)
Run Code Online (Sandbox Code Playgroud)

用于将列"x"中的值转换为列"y"的用户定义函数(udf)为:

val extractDateAsInt = udf[Int, String] (
  (d:String) => d.substring(0, 10)
      .filterNot( "-".toSet)
      .toInt )
Run Code Online (Sandbox Code Playgroud)

并且工作,处理空值是不可能的.

尽管如此,我可以做类似的事情

val extractDateAsIntWithNull = udf[Int, String] (
  (d:String) => 
    if (d != …
Run Code Online (Sandbox Code Playgroud)

scala nullable user-defined-functions apache-spark apache-spark-sql

27
推荐指数
3
解决办法
4万
查看次数

C#struct,如何分配空值?

我有一个清单:

List<int, SomeStruct>
Run Code Online (Sandbox Code Playgroud)

出于某种原因,它不允许我为其分配空值.如果我想没有关联的结构,我该怎么办?

c# struct nullable

26
推荐指数
3
解决办法
5万
查看次数

通过编译器生成的locals以可为空的结构隐式转换为System.Double:为什么会失败?

鉴于以下内容,为什么会抛出InvalidCastException?我不明白为什么它应该在一个bug之外(这是在x86; x64与clrjit.dll中的0xC0000005崩溃).

class Program
{
    static void Main(string[] args)
    {
        MyDouble? my = new MyDouble(1.0);
        Boolean compare = my == 0.0;
    }

    struct MyDouble
    {
        Double? _value;

        public MyDouble(Double value)
        {
            _value = value;
        }

        public static implicit operator Double(MyDouble value)
        {
            if (value._value.HasValue)
            {
                return value._value.Value;
            }

            throw new InvalidCastException("MyDouble value cannot convert to System.Double: no value present.");
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

以下是为以下内容生成的CIL Main():

.method private hidebysig static void Main(string[] args) cil managed
{
    .entrypoint
    .maxstack 3
    .locals init …
Run Code Online (Sandbox Code Playgroud)

c# cil nullable compiler-generated

26
推荐指数
2
解决办法
7802
查看次数

哪个更好?使用Value属性转换为nullable类型还是检索值?

一种方式比另一种方式有性能优势吗?

还有其他理由选择其中一个吗?

.net c# nullable

26
推荐指数
2
解决办法
4153
查看次数

在Kotlin我如何转换Int?到国际

HashMap<Int, Int>在Kotlin中使用了一个,当我get退出它时,返回类型是Int?.

如何将其转换Int?Int

到目前为止,我已经尝试过使用Int?.toInt(),但这似乎正在回归Int?.

我正在编写Fibonacci函数,我的代码如下:

val fibMemo : Map<Int, Int> = HashMap<Int,Int>()
fun fibN(n:Int) : Int {
    if (n == 0 || n == 1) return 1
    if (fibMemo.containsKey(n))
        // Error here: Type mismatch: inferred type is Int? but Int was expected
        return fibMemo.get(n)?.toInt()
    else {
        val newNum : Int = fibN(n-1) + fibN(n-2)
        fibMemo.put(n, newNum)
        return newNum
    }
}
Run Code Online (Sandbox Code Playgroud)

java nullable kotlin

26
推荐指数
3
解决办法
1万
查看次数

让Kotlin警告将灵活/平台类型分配给非null类型?

当从Kotlin调用非可空性注释的Java函数时,我们得到灵活类型的返回值,用感叹号表示,例如String!.

Kotlin默默地允许将这些灵活值分配给正常的非null类型,例如String,这可能在运行时导致NullPointerExceptions.

我更希望得到编译器警告或错误的此类分配.或者,将平台类型视为等效于可空类型(例如String?).

例如,使用此Java代码:

import android.os.SystemClock;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;

public class NullTest {

    private String maybe() {
        if (SystemClock.elapsedRealtimeNanos() % 2 == 0) {
            return null;
        }
        return "ok";
    }

    public String annotatedNothing()            { return maybe(); }
    @Nullable public String annotatedNullable() { return maybe(); }
    @NonNull  public String annotatedNonNull()  { return "ok"; }

}
Run Code Online (Sandbox Code Playgroud)

...以及以下Kotlin代码,我想在两个新行上看到错误(请参阅注释):

fun testnulls() {
    val obj = NullTest()

    val nullExact: String  = obj.annotatedNullable() // already gives an error
    val …
Run Code Online (Sandbox Code Playgroud)

nullable non-nullable kotlin

26
推荐指数
1
解决办法
682
查看次数

当T为什么时,为什么Nullable <T>不是有效的自定义属性参数?

如果我有这样的枚举

public enum Hungry
{
    Somewhat,
    Very,
    CouldEatMySocks
}
Run Code Online (Sandbox Code Playgroud)

和这样的自定义属性

public class HungerAttribute : Attribute
{
    public Hungry HungerLevel { get; set; }
    public Hungry? NullableHungerLevel { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

我可以做这个

[Hunger(HungerLevel = Hungry.CouldEatMySocks)]
public class Thing1
Run Code Online (Sandbox Code Playgroud)

但我不能这样做

[Hunger(NullableHungerLevel = Hungry.CouldEatMySocks)]
public class Thing2
Run Code Online (Sandbox Code Playgroud)

它会生成一个错误,指出"'NullableHungerLevel'不是有效的命名属性参数,因为它不是有效的属性参数类型".

为什么不允许这样做?据我所知,从根本上说它不在可接受的类型列表中.有效类型似乎是基元,枚举,字符串,类型和前面类型的一维数组.

这只是一个旧规则,当Nullable出现时没有得到更新?

c# attributes nullable

25
推荐指数
3
解决办法
8173
查看次数

强类型数据表/数据集中的可空类型 - 解决方法?

强类型DataTable支持"可空"字段类型,但设计器不允许您将设置更改为任何值类型字段的"允许空值".(即:字符串类型允许为空,但int不允许).

解决方法是在您想要获取Myfield时调用IsMyFieldNull().如果在包含null的情况下访问MyField,则会抛出一个eception.

这是一个巨大的麻烦,除了在显示null时可能导致应用程序崩溃时导致许多运行时错误.多年来我一直向微软抱怨这一点,但是每个新版本的visual studio仍然不允许使用可空的值类型.

我的问题:任何人都知道可以用来解决这个主要缺点的花哨的扩展方法吗?

c# extension-methods nullable dataset strongly-typed-dataset

25
推荐指数
2
解决办法
1万
查看次数

三元运算符VB vs C#:为什么解决Nothing为零?

我只是在脚下射击,想知道是否有实际的理由让这种情况成为可能.
无论如何,这个问题可以留在未来的脚射手的方便.


假设我们在vb.net中有一个可以为null的值:

Dim i as Integer?
Run Code Online (Sandbox Code Playgroud)

我们希望根据条件为其分配值,并使用三元运算符,因为它非常简洁和东西:

i = If(condition(), Nothing, 42)
Run Code Online (Sandbox Code Playgroud)

也就是说,如果条件是true,则采用可空性,否则采用该值.
射击发生的时间点.没有明显的原因VB编译器决定,对于共同的基类型NothingIntegerInteger,在该点它默默地平移语句:

i = If(condition(), 0, 42)
Run Code Online (Sandbox Code Playgroud)

现在,如果您要在C#中执行此操作:

i = (condition()) ? null : 42;
Run Code Online (Sandbox Code Playgroud)

你会立即得到一个编译器错误,说<null>不能很好地混合int.这很棒,因为这次我采用C#方式,我的脚会更健康.为了编译,你必须明确地写:

i = (condition()) ? null : (int?)42;
Run Code Online (Sandbox Code Playgroud)

现在,您可以在VB中执行相同操作并获得正确的null-ness:

i = If(condition(), Nothing, CType(42, Integer?))
Run Code Online (Sandbox Code Playgroud)

但这需要首先拍摄你的脚.没有编译器错误,也没有警告.这是Explicit OnStrict On.


所以我的问题是,为什么?
我应该把它当作编译器错误吗?
或者有人可以解释为什么编译器会以这种方式运行?

c# vb.net nullable ternary-operator

25
推荐指数
2
解决办法
1万
查看次数

为什么Nullable <T>是一个结构?

我想知道为什么它Nullable<T>是一个值类型,如果它被设计为模仿引用类型的行为?我理解GC压力之类的东西,但我不相信 - 如果我们想要int表现得像参考,我们可能会对所有具有真实参考类型的后果感到满意.我没有理由Nullable<T>不仅仅是盒装版本的Tstruct.

作为价值类型:

  1. 它仍然需要装箱和取消装箱,而且,拳击必须与"普通"结构有点不同(将零值无效视为真实null)
  2. 检查null时需要区别对待(简单地完成Equals,没有真正的问题)
  3. 它是可变的,打破了结构应该是不可变的规则(好吧,它在逻辑上是不可变的)
  4. 它需要有特殊的限制来禁止递归 Nullable<Nullable<T>>

不制作Nullable<T>参考类型可以解决这个问题吗?

改写和更新:

我已经修改了我的理由列表,但我的一般问题仍然是开放的:

引用类型如何Nullable<T>比当前值类型实现更糟糕?这只是GC压力和"小的,不可改变的"规则吗?它对我来说仍然很奇怪......

c# clr nullable

24
推荐指数
3
解决办法
2824
查看次数