R 使用包含匹配数字的向量,从结构未知的混合类型列中提取数字

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

我的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 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的功能角度来看,因此您需要相应地进行调整:

  • 将tbl1划分为大num分区,df
  • 从tbl2创建一个列表l

    val l = ...toList
    
  • 以某种方式执行withColumn函数,例如

    df.withColumn("some col",
                   col("your col").rlike(l.mkString("|"))
                 )
    

  • 从Scala的功能角度来看,您需要进行相应的调整:

  • 将tbl1划分为大num分区,df
  • 从tbl2创建一个列表l

    val l = ...toList
    
  • 以某种方式执行withColumn函数,例如

    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行“堆叠”。当我试图只看到第一次观察时,我的火花期冻结了