Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Scala和Spark在单独的配置单元分区上并行运行任务,以加速加载配置单元并将结果写入配置单元或拼花地板_Scala_Python 2.7_Hive_Pyspark_Apache Spark 1.3 - Fatal编程技术网

使用Scala和Spark在单独的配置单元分区上并行运行任务,以加速加载配置单元并将结果写入配置单元或拼花地板

使用Scala和Spark在单独的配置单元分区上并行运行任务,以加速加载配置单元并将结果写入配置单元或拼花地板,scala,python-2.7,hive,pyspark,apache-spark-1.3,Scala,Python 2.7,Hive,Pyspark,Apache Spark 1.3,这个问题是[这个问题]的衍生问题 编辑请看我在这篇文章底部的更新编辑 我使用了Scala和现在的Pyspark来完成相同的任务,但是我在将数据帧保存到拼花地板或csv或将数据帧转换为列表或数组类型的数据结构时遇到了问题。以下是相关的python/Pypark代码和信息: #Table is a List of Rows from small Hive table I loaded using #query = "SELECT * FROM Table" #Table = sqlContext.s

这个问题是[这个问题]的衍生问题

编辑请看我在这篇文章底部的更新编辑

我使用了Scala和现在的Pyspark来完成相同的任务,但是我在将数据帧保存到拼花地板或csv或将数据帧转换为列表或数组类型的数据结构时遇到了问题。以下是相关的python/Pypark代码和信息:

#Table is a List of Rows from small Hive table I loaded using
#query = "SELECT * FROM Table"
#Table = sqlContext.sql(query).collect()

for i in range(len(Table)):

    rows = sqlContext.sql(qry)
    val1 = Table[i][0]
    val2 = Table[i][1]
    count = Table[i][2]
    x = 100 - count

#hivetemp is a table that I copied from Hive to my hfs using:
#create external table IF NOT EXISTS hive temp LIKE hivetableIwant2copy LOCATION "/user/name/hiveBackup";
#INSERT OVERWRITE TABLE hivetemp SELECT * FROM hivetableIwant2copy;

    query = "SELECT * FROM hivetemp WHERE col1<>\""+val1+"\" AND col2 ==\""+val2+"\" ORDER BY RAND() LIMIT "+str(x)

    rows = sqlContext.sql(query)
    rows = rows.withColumn("col4", lit(10))
    rows = rows.withColumn("col5", lit(some_string))
#writing to parquet is heck slow AND I can't work with pandas due to the library not installed on the server
    rows.saveAsParquetFile("rows"+str(i)+".parquet")
#tried this before and heck slow also
    #rows_list = rows.collect()
    #shuffle(rows_list)
我曾尝试在Scala中执行上述操作,但也遇到了类似的问题。我可以轻松地加载配置单元表或配置单元表的查询,但需要进行随机洗牌或存储大型数据帧会遇到内存问题。另外,添加两个额外的列也有一些挑战

我要添加行的配置单元表hiveTemp有5570000~550万行和120列

我在for循环中迭代的配置单元表有5000行和3列。hiveTemp中有25个独特的val1 a列,以及val1和val2 3000的组合。Val2可以是5列中的一列及其特定单元格值。这意味着如果我调整了代码,那么我可以将行的查找从5000减少到26,但是我必须检索、存储和随机洗牌的行数将非常大,因此会出现内存问题,除非有人对此提出建议

至于我需要添加到表中的行总数可能是100000

最终的目标是将原来的5.5毫米行的表附加上100k+行,作为蜂窝或拼花地板表写入。如果更简单的话,我可以在自己的表中写入100k行,稍后可以合并到5.5 mill表中

Scala或Python很好,但Scala更受欢迎

任何关于这方面的建议和最好的选择都是非常好的

非常感谢

编辑 关于这个问题,我还有一些想法: 我使用散列分区器将配置单元表划分为26个分区。这是基于有26个不同值的列值。我希望在for循环中执行的操作可以通用化,这样它只需要在每个分区上执行。 也就是说,我怎样才能在线编写scala代码来实现这一点,以及让一个单独的执行器在每个分区上执行这些循环,或者我可以在线查看什么指南?我想这会让事情变得更快。
我知道如何使用多线程执行类似的操作,但不知道如何在scala/spark范例中执行。

您能解决这个问题吗?我正在尝试解决类似的问题,所以如果你能解决这个问题,任何建议都会有帮助吗?我正试图解决类似的问题,所以任何建议都会有所帮助