2017-12-19 1 views
0

나는 수십 개의 열이있는 SparkDataFrame을 가지고 있으며, "time"이라는 단어를 가진 것들만 선택하고 싶습니다. 대신 수동으로 컬럼의 모든 이름을 작성하는 데이 같은 일을공통 태그가있는 모든 열을 R로 선택하는 방법은 무엇입니까?

:

df_selection <- SparkR::select(df, like('^time.*?')) 

이 있습니까 :

df_selection <- SparkR::select(df, "TRT_time", "Flight_time", "SS_time", ...) 

내가 좋아하는 일을하고 싶습니다 SparkR에서 이것을하는 좋은 방법? SQL like 연산자에 해당하는 기능은 무엇입니까? 나는 R에서 전체 begginer 해요, 아주 간단한 질문이지만 미안 해요.하지만 주위에 내 머리를 얻을 수 없습니다.

감사합니다.

+1

'df_selection <-df [grepl ("시간", COLNAMES (DF))]이 나를 위해 작동하지 않는' –

+0

: 오류 열에서 (callJStatic ("org.apache.spark.sql.functions" , "col", x)) : 함수 'column'에 대한 메서드 선택에서 'x'인수를 계산하는 중 오류가 발생했습니다. handleErrors (returnStatus, conn)의 오류 – Totor

답변

0

SparkDataFrame이더라도 names()을 사용하여 열 이름에 액세스 할 수 있습니다. 그런 다음 grepl()을 사용하여 패턴 일치를 찾을 수 있습니다.

  time_hour 
1 2013-01-01 06:00:00 
2 2013-01-01 06:00:00 
3 2013-01-01 06:00:00 
4 2013-01-01 06:00:00 
5 2013-01-01 07:00:00 
6 2013-01-01 06:00:00 

업데이트 코멘트 후 :

가장 좋은 것은 당신이 col 서브 세트를 OR'|'로 포함하는 것입니다 반환

cols <- names(df) 

head(select(df, cols[grepl('^time.*?', names(df))])) 

.

head(SparkR::select(df, cols[grepl('^time.*?', names(df)) | cols == "airline_iata"])) 

참고 :이 c(cols[grepl('^time.*?', names(df))], 'airline_iata') 같은 문자 벡터를 만들 수 있지만 열 이름이 발견되지 않는 경우 불꽃이 오류가 발생합니다. airline_iata 'is not in 이름 (df)`.

+0

감사! 이것은 원했던 것처럼 작동합니다!. 마지막으로 한 가지 : 동일한 선택 항목의 이름에 "시간"이없는 열을 선택하려는 경우. 어떻게해야합니까? 나는 triyng이지만 작동하지 않습니다. select (df, cols [grepl ("time", names (df))], "airline_iata") – Totor

관련 문제