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我更正了,这是一个小括号问题