Matlab:获取有序对的列表(Matlab: Get list of ordered pairs)
让我用一个例子来解释:如果我给'4'作为输入,我想要对(1,2),(1,3),(1,4),(2,3),(2,4), (3,4)在这样的矩阵中:
1 2 1 3 1 4 2 3 2 4 3 4
我为什么需要这个? 我将生成一个从1到(n *(n-1)/ 2)的随机数,我想要相应的对。 我想我会首先生成配对列表,然后使用随机数作为索引。 如果有一个直接的解决方案,那就好多了!
编辑:实际上我不需要所有对,我需要随机排序的对不重复和第一个值<第二个值。 有5000个列表,每个列表有n个元素。 所以可能的总对是tot = 5000 * n *(n-1)/ 2。 如果我使用randperm从1到tot生成t随机整数,我可以将它翻译成一对吗? 我可以通过除以5000获得列表编号。如果我用5000修改,我将得到对索引。 我试图将这对索引转换成一对。 很抱歉没有解释所有这些。 希望我很清楚。
Let me explain with an example: If I give '4' as input, I want the pairs (1,2), (1,3), (1,4),(2,3),(2,4),(3,4) in a matrix like so:
1 2 1 3 1 4 2 3 2 4 3 4
Why do I need this? I will generate a random number from 1 to (n*(n-1)/2) and I want the corresponding pair. I figured I will generate the pair list first and then use the random number as an index. If there is a direct solution to this, then much better!
Edit: Actually I don't need all pairs, I need t random ordered pairs that don't repeat and first value < second value. There are 5000 lists each with n elements. So total pairs possible is tot = 5000 * n * (n-1)/2. If I generate t random integers from 1 to tot using randperm, can I translate it into a pair? I can get the list number by dividing by 5000. And if I mod with 5000, I will get pair index. I was trying to convert this pair index into a pair. Sorry for not explaining all this before. Hope I am clear.
原文:https://stackoverflow.com/questions/29983979
最满意答案
所以
(sc.parallelize(ThirdPartyLib.getX)).asInstanceOf[RDD[XData]]
你先并行化,然后再施法。 所以spark仍然需要ThirdPartyLib.models.XData可序列化。 此类演员可能会爆炸,因为类型不同。
我认为这应该可以解决问题
def convertThirdPartyXDataToMyXData( xd: ThirdPartyLib.models.XData): XData = ??? val data: RDD[ThirdPartyLib.models.XData] = sc.parallelize(ThirdPartyLib.getX.map(convertThirdPartyXDataToMyXData)) //if you have a map on the collection that getX returns
So with
(sc.parallelize(ThirdPartyLib.getX)).asInstanceOf[RDD[XData]]
you parallelize first and then cast. so spark still requires ThirdPartyLib.models.XData to be serializable. Also that cast would probably explode because the types aren't the same.
I think this should do the trick
def convertThirdPartyXDataToMyXData( xd: ThirdPartyLib.models.XData): XData = ??? val data: RDD[ThirdPartyLib.models.XData] = sc.parallelize(ThirdPartyLib.getX.map(convertThirdPartyXDataToMyXData)) //if you have a map on the collection that getX returns
相关问答
更多-
我不认为其他答案是完全正确的。 RDD确实是可序列化的 ,所以这不是导致您的任务失败的原因。 Spark是一种分布式计算引擎,其主要抽象是一种弹性分布式数据集( RDD ),可以被视为分布式集合。 基本上,RDD的元素在集群的节点之间进行分区,但是Spark将其从用户身上抽出,让用户与RDD(集合)进行交互,就好像它是本地的一样。 不要太多的细节,但是当您在RDD( map , flatMap , filter和其他)上运行不同的转换时,转换代码(closure)就是: 在驱动程序节点上序列化, 发送到集群 ...
-
问题: 您的问题是Loader作为不可serializable 尝试将其更改为object 。 或者按照下面给出的例子。 object not serializable (class: org.apache.spark.SparkContext, value: org.apache.spark.SparkContext@323a9221) 这是因为你的Loader是类,你通过创建新实例将SparkContext传递给Loader类。 按照这个例子(简单而优雅的方式),这应该工作: import org.a ...
-
有几种选择。 如果只需要用于json序列化的Object节点,那么您可以重写Student类并完全删除ObjectNode 。 在您的示例中,您可以使用firstName和lastName字段将其替换为对象 class Name implements Serializable { String firstName; String lastName; } 但是,如果这不可能,您可以像这样进行自定义序列化 public class Student implements Serializable ...
-
每当scala闭包引用类变量(如treeName ,JVM就会将父类与闭包序列化。 但是,您的RootTableScan类不可序列化! 解决方案是创建一个本地字符串变量: // builds a scan def buildScan(requiredColumns: Array[String], filters: Array[Filter]): RDD[Row] = { val localTreeName = treeName // this is safe to serial ...
-
由new Function ...创建的匿名类需要对封闭实例的引用,并且序列化该函数需要序列化封闭实例,包括dataFormat 和所有其他字段。 如果该类未标记为可Serializable ,或者具有任何不可序列化的非transient字段,则它将不起作用。 即使它确实如此,它却默默无闻地表现得更糟。 不幸的是,为了完全解决这个问题,你需要创建一个命名的静态内部类(或者只是一个单独的类),它甚至不能是本地的(因为Java中的匿名或局部类都不能是静态的): static class MyFunction e ...
-
Spark MiniCluster(Spark MiniCluster)[2022-03-30]
您可以创建应用程序并使用本地主服务器在独立模式下启动Spark: import org.apache.spark.SparkContext import org.apache.spark.SparkContext._ import org.apache.spark.SparkConf object LocalApp { def main(args: Array[String]) { val sc = new SparkContext("local[*]", "local-app", new S ... -
Spark没有SPARK_HOME(Spark without SPARK_HOME)[2024-02-01]
已编辑以包含评论中的有用信息 spark_shell只是一个交互式shell,它是独立的,不是其他进程应该连接的“实例”。 当你通过spark-submit运行你的spark应用程序(或者只是运行你的spark代码)时,它将启动它自己的spark实例。 如果您需要设置任何属性,则可以将其设置为系统属性或spark-submit --conf参数 spark-submit要求首先使用Maven Assembly插件来编译应用程序jar和依赖项。 然后应将其部署到SPARK_HOME目录然后使用必须也部署在SP ... -
UIMA与Spark(UIMA with Spark)[2022-02-08]
主要问题是访问对象,因为UIMA在运行其分析引擎时尝试重新实例化对象。 如果对象具有本地引用,那么从远程spark集群访问将会出现问题。 某些RDD函数可能无法在UIMA上下文中工作。 但是,如果您不使用单独的远程群集,则不会出现问题。 (我说的是uima-fit 2.2) The main problem is accessing objects because UIMA tries to re instantiate objects when running their analyse engines. ... -
所以 (sc.parallelize(ThirdPartyLib.getX)).asInstanceOf[RDD[XData]] 你先并行化,然后再施法。 所以spark仍然需要ThirdPartyLib.models.XData可序列化。 此类演员可能会爆炸,因为类型不同。 我认为这应该可以解决问题 def convertThirdPartyXDataToMyXData( xd: ThirdPartyLib.models.XData): XData = ??? val data: RDD[ThirdP ...
-
因此,可以将不可序列化的类型读入RDD - 即具有不可序列化的RDD(这似乎是反直觉的)。 但是,一旦您希望在该RDD上执行需要对象可序列化的操作,就像repartition一样,它需要是可序列化的。 而且事实证明,那些奇怪的类SomethingWritable虽然是为了序列化事物的唯一目的而发明的,但实际上并不是可序列化的:(。所以你必须将这些东西映射到字节数组然后再返回: sc.sequenceFile[NullWritable, BytesWritable](in) .map(_._2.copyByt ...