R 使用包含匹配数字的向量,从结构未知的混合类型列中提取数字
我的spark Tible[spark_tbl1]中有一个混合类型列(字符串和具有不同结构的数字),可能包含每行的数字代码。我得到了另一个tible[spark_tbl2],它实际上列出了我想从[spark_tbl1]中提取的数字代码(大约6000行) 问题是这两个tibble没有任何共同的键。解决这个问题的聪明方法是什么。下面是一个例子:R 使用包含匹配数字的向量,从结构未知的混合类型列中提取数字,r,dplyr,sparklyr,R,Dplyr,Sparklyr,我的spark Tible[spark_tbl1]中有一个混合类型列(字符串和具有不同结构的数字),可能包含每行的数字代码。我得到了另一个tible[spark_tbl2],它实际上列出了我想从[spark_tbl1]中提取的数字代码(大约6000行) 问题是这两个tibble没有任何共同的键。解决这个问题的聪明方法是什么。下面是一个例子: #This is my spark_tbl1 which contains the mmixed types column #I limit rows to
#This is my spark_tbl1 which contains the mmixed types column
#I limit rows to 3 (I got actually 1.6E6 rows)
df=data.frame(mixed_types_colum=c("ZB0R2298000","BZRT929700","FTUI06970T"),
another_column=c("Banana","Apple","Orange"))
spark_tbl1=sdf_copy_to(sc,df,"df1",overwrite = TRUE)
spark_tbl1%>%head()
# Source: spark<spark_tbl1> [?? x 2]
mixed_types_colum another_column
<chr> <chr>
1 ZB0R2298000 Banana
2 BZRT929700 Apple
3 FTUI06970T Orange
#这是我的spark\u tbl1,其中包含mmix types列
#我将行限制为3行(实际上我得到了1.6E6行)
df=数据帧(混合型列=c(“ZB0R2298000”、“BZRT929700”、“FTUI06970T”),
另一列=c(“香蕉”、“苹果”、“橘子”))
spark\u tbl1=sdf\u copy\u to(sc,df,“df1”,overwrite=TRUE)
火花头(tbl1%>%head)
#来源:火花[?×2]
混合\u类型\u列另一个\u列
1 ZB0R2298000香蕉
2 BZRT929700苹果
3 FTUI06970T橙色
#这个tible应该有6000多行。
df2=数据帧(数字代码=c(“298”、“297”、“697”))
spark\u tbl2=sdf\u copy\u to(sc,df2,“df2”,overwrite=TRUE)
火花头()
#来源:火花[?x 1]
数字编码
1 298
2 297
3 697
我预计产出:
spark_tbl2%>%head()
# Source: spark<spark_tbl2> [?? x 3]
mixed_types_colum another_column digit_code
<chr> <chr> <chr>
1 ZB0R2298000 Banana 298
2 BZRT929700 Apple 297
3 FTUI06970T Orange 697
spark\u tbl2%>%head()
#来源:火花[?x 3]
混合\u类型\u列另\u列数字\u代码
1 ZB0R2298000香蕉298
2 BZRT929700苹果297
3 FTUI06970吨橙697
提前谢谢你 从Scala的功能角度来看,因此您需要相应地进行调整:
val l = ...toList
df.withColumn("some col",
col("your col").rlike(l.mkString("|"))
)
从Scala的功能角度来看,您需要进行相应的调整:
val l = ...toList
df.withColumn("some col",
col("your col").rlike(l.mkString("|"))
)
您可以使用正则表达式为
df2
中的每个数字代码查找df
中相应的行。然后可以(懒洋洋地)将其包装成一个lappy
,以便在行上迭代(这里可能有更聪明的方法),例如
其中,
df,df2
的定义如上所述(因为未指定用于其他数据帧的库) 您可以使用正则表达式为df2
中的每个数字代码查找df
中相应的行。然后可以(懒洋洋地)将其包装成一个lappy
,以便在行上迭代(这里可能有更聪明的方法),例如
其中,
df,df2
的定义如上所述(因为未指定用于其他数据帧的库) 6000多人也是100万人。我想你的意思是大约6000个。实际上,tibble[spark_tibble2]有大约6000个不同的数字代码值,可能出现在[spark_tibble1]混合类型列的160万个不同值中,这可能是一个遵循协议选择答案或以其他方式进行评论的想法。超过6000个数字代码值也是100万。我想你的意思是大约6000个。实际上,tibble[spark_tibble2]有大约6000个不同的数字代码值,这些数字代码可能出现在[spark_tibble1]混合类型列的160万个不同值中,这可能是遵循协议选择答案或其他注释的一个想法。我在Rstudio中使用Sparkyr库。我以这种方式处理,但结果sql查询太深,大约有6000行“堆叠”。当我试图看到我的Spark会话冻结的第一次观察时,我使用Rstudio中的Sparkyr库。我以这种方式处理,但结果sql查询太深,大约有6000行“堆叠”。当我试图只看到第一次观察时,我的火花期冻结了