相关疑难解决方法(0)

使用pyspark/spark对大型分布式数据集进行采样

我在hdfs中有一个文件,它分布在集群中的节点上.

我正试图从这个文件中随机抽取10行.

在pyspark shell中,我使用以下命令将文件读入RDD:

>>> textFile = sc.textFile("/user/data/myfiles/*")
Run Code Online (Sandbox Code Playgroud)

然后我想简单地拿一个样本......关于Spark的一个很酷的事情是有类似的命令takeSample,不幸的是我认为我做错了,因为以下需要很长时间:

>>> textFile.takeSample(False, 10, 12345)
Run Code Online (Sandbox Code Playgroud)

所以我尝试在每个节点上创建一个分区,然后使用以下命令指示每个节点对该分区进行采样:

>>> textFile.partitionBy(4).mapPartitions(lambda blockOfLines: blockOfLines.takeSample(False, 10, 1234)).first()
Run Code Online (Sandbox Code Playgroud)

但这会给出一个错误ValueError: too many values to unpack:

org.apache.spark.api.python.PythonException: Traceback (most recent call last):
  File "/opt/cloudera/parcels/CDH-5.0.2-1.cdh5.0.2.p0.13/lib/spark/python/pyspark/worker.py", line 77, in main
    serializer.dump_stream(func(split_index, iterator), outfile)
  File "/opt/cloudera/parcels/CDH-5.0.2-1.cdh5.0.2.p0.13/lib/spark/python/pyspark/serializers.py", line 117, in dump_stream
    for obj in iterator:
  File "/opt/cloudera/parcels/CDH-5.0.2-1.cdh5.0.2.p0.13/lib/spark/python/pyspark/rdd.py", line 821, in add_shuffle_key
    for (k, v) in iterator:
ValueError: too many values to unpack
Run Code Online (Sandbox Code Playgroud)

如何使用spark或pyspark从大型分布式数据集中采样10行?

hadoop apache-spark

13
推荐指数
2
解决办法
2万
查看次数

标签 统计

apache-spark ×1

hadoop ×1