Spark-shell и pyspark с использованием glom - PullRequest
0 голосов
/ 12 января 2019

Я выполняю сценарий, используя пряжу spark-shell --master, как показано ниже

У меня есть текстовый файл в папке HDFS "/user/cloudera/Day_12_Jan/file.txt" Содержимое файла

Spark SQL - это модуль Spark для структурированной обработки данных. язык запросов высокого уровня и дополнительная информация о типах делает Spark SQL более эффективным. Spark SQL переводит команды в коды, которые обработано исполнителями. Некоторые настройки могут повлиять на Spark Производительность SQL. Для эффективного представления наших данных он также использует знание типов очень эффективно. Spark SQL играет большую роль в оптимизация запросов. Spark SQL использует колоночное хранилище в памяти при кэшировании данных. Колонка в памяти - это функция, которая позволяет хранить данные в столбчатый формат, а не формат строки. Колоннарное хранилище позволяет Сам по себе очень хорошо для аналитических запросов, найденных в бизнес-аналитике товар. Используя колоночное хранилище, данные занимают меньше места при кэшировании и если запрос зависит только от подмножеств данных, то Spark SQL сводит к минимуму чтение данных.

Далее я читаю этот файл в spark-shell, как показано ниже

      scala> val readwords=sc.textFile("hdfs://localhost:8020/user/cloudera/Day_12_Jan/file.txt")
             readwords: org.apache.spark.rdd.RDD[String] = hdfs://localhost:8020/user/cloudera/Day_12_Jan/file.txt MapPartitionsRDD[6] at textFile at <console>:27

      scala> readwords.glom().map(x=>("".join(x))).flatMap(line=>(line.split("."))).map(word=>(word,1)).reduceByKey((a,b)=>(a+b)).sortByKey.collect
             <console>:30: error: value join is not a member of String
             readwords.glom().map(x=>("".join(x))).flatMap(line=>(line.split("."))).map(word=>(word,1)).reduceByKey((a,b)=>(a+b)).sortByKey.collect
                                      ^

Существует ошибка, из-за которой glom создал массив строк, и операция присоединения не может быть применена к строке, что мне кажется правильным

Но если я беру тот же кусок кода в pyspark, я вижу, что он не жалуется с той же ошибкой Так как glom () не является специфичным для scala или python, и это искровое преобразование, так почему он работает в pyspark, а не в spark-shell

pyspark выполнение задачи

     >>> sentences=readwords.glom().map(lambda x:"".join(x)).flatMap(lambda y:y.split(".")).flatMap(lambda z:z.split( )).map(lambda a:(a,1)).reduceByKey(lambda a,b:a+b).map(lambda a:(a[1],a[0])).sortByKey(False)
     >>> for row in sentences.collect():
     ...     print(row)
     ... 
         (9, u'the')
         (8, u'Spark')
         (7, u'SQL')
         (6, u'data') 
         (5, u'of')
         (5, u'columnar')

Дайте мне знать, если я что-то здесь не так делаю.

Спасибо Сумит Павар

...