mongodb
  • apache-spark
  • pyspark
  • apache-spark-sql
  • stratio
  • 2016-06-10 4 views 3 likes 
    3

    Stratio의 Spark-MongoDB library을 사용하여 MongoDB 컬렉션을 쿼리하려고합니다.Stratio의 Spark-MongoDB 라이브러리를 사용하는 MongoDB 쿼리 필터

    reader = sqlContext.read.format("com.stratio.datasource.mongodb") 
    data = reader.options(host='<ip>:27017', database='<db>', collection='<col>').load() 
    

    이것은 점화 dataframe에 전체 수집을로드 및 컬렉션이 큰대로, 그것은 많은 시간을 가지고있다 : 나는 this 스레드가 시작하고 나는 현재 다음 코드 조각을 실행하는거야 다음 . 쿼리 필터를 지정하고 선택한 데이터 만 Spark에로드하는 방법이 있습니까?

    답변

    3

    스파크 데이터 프레임 처리에는 스키마 지식이 필요합니다. 유연하고 알 수없는 스키마를 가진 데이터 소스로 작업 할 때, Spark이 데이터로 무엇을 할 수 있기 전에, 스키마를 발견해야합니다. 이것은 load()입니다. data 스키마를 발견하기위한 목적으로 만 데이터를 조사합니다. data에서 작업을 수행하면 (예 : collect()) Spark에서 실제로 처리하기 위해 데이터를 읽습니다.

    load()을 근본적으로 빠르게하는 유일한 방법은 스키마를 직접 제공하여 스키마 검색의 필요성을 없애는 것입니다. 여기에 예제가 the library documentation에서 가져옵니다 :

    import org.apache.spark.sql.types._ 
    val schemaMongo = StructType(StructField("name", StringType, true) :: StructField("age", IntegerType, true) :: Nil) 
    val df = sqlContext.read.schema(schemaMongo).format("com.stratio.datasource.mongodb").options(Map("host" -> "localhost:27017", "database" -> "highschool", "collection" -> "students")).load 
    

    당신은 1.0 기본보다 작은 값으로 schema_samplingRatio 구성 매개 변수를 설정하여 컬렉션의 문서의 일부를 샘플링하여 약간의 이득을 얻을 수 있습니다. 그러나 Mongo에는 샘플링이 내장되어 있지 않기 때문에 잠재적으로 많은 데이터에 액세스 할 수 있습니다.

     관련 문제

    • 관련 문제 없음^_^