Dataframe PySpark中的拆分列:如何确保输出是int数组,但对于某个字符使用空数组

Dataframe PySpark中的拆分列:如何确保输出是int数组,但对于某个字符使用空数组,dataframe,apache-spark,pyspark,apache-spark-sql,Dataframe,Apache Spark,Pyspark,Apache Spark Sql,我有一个数据列,看起来像 /或0/1 应将和拆分为带有字符串/的整数数组,并注意应为空 我第一次尝试这样做: df2 = df2.withColumn('genotype_indices', split(col("genotype_index"), "/").cast("array<int>")).alias("genotype_indices") df2=df2.withColumn('基因型指数'),split(col(“基因型指数”),“/”).cast(“数组”)。别名(“

我有一个数据列,看起来像

/
0/1

应将和拆分为带有字符串
/
的整数数组,并注意
应为空

我第一次尝试这样做:

df2 = df2.withColumn('genotype_indices', split(col("genotype_index"), "/").cast("array<int>")).alias("genotype_indices")
df2=df2.withColumn('基因型指数'),split(col(“基因型指数”),“/”).cast(“数组”)。别名(“基因型指数”)
但问题是
被强制转换为
0
,这是不正确的

我真的不想使用用户定义的功能,因为这些功能会让笔记本速度异常缓慢


如何才能使
在PySpark中转换为
无或空,并将所有其他整数字符串转换为整数?

我认为它被转换为
0
,因为
用于小数的浮点数,它相当于
0.0
,所以当转换为int时,它会给出
0

您可以使用
regexp\u replace
功能在拆分前删除点:

df2 = df2.withColumn('genotype_indices', split(regexp_replace(col("genotype_index"), "\\.", ""), "/").cast("array<int>"))
df2=df2.withColumn('genetic\u index',split(regexp\u replace(col(“genetic\u index”),“\\”,”),“/”.cast(“数组”))

我认为它被转换为
0
,因为
用于小数的浮点数,它相当于
0.0
,所以当转换为int时,它给出
0

您可以使用
regexp\u replace
功能在拆分前删除点:

df2 = df2.withColumn('genotype_indices', split(regexp_replace(col("genotype_index"), "\\.", ""), "/").cast("array<int>"))
df2=df2.withColumn('genetic\u index',split(regexp\u replace(col(“genetic\u index”),“\\”,”),“/”.cast(“数组”))

列长度是固定的吗?@VamsiPrabhala列长度是可变的吗?@VamsiPrabhala列长度是可变的吗?由于某些原因,此解决方案无法找到列
基因型索引
并且我很困惑为什么他使用df.withColumn,urs有df2.withColumn。。那可能是it@MohammadMurtazaHashmi我更正了它,这是一个小括号问题出于某种原因,这个解决方案找不到列
genetic_index
,我很困惑为什么他使用df.withColumn,urs有df2.withColumn。。那可能是it@MohammadMurtazaHashmi我更正了,这是一个小括号问题