org.apache.hadoop.hive.ql.plan.SparkEdgeProperty Maven / Gradle / Ivy
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.hadoop.hive.ql.plan;
@Explain(displayName = "Edge Property")
public class SparkEdgeProperty {
public static final long SHUFFLE_NONE = 0; // No shuffle is needed. For union only.
public static final long SHUFFLE_GROUP = 1; // HashPartition shuffle, keys are not sorted in any way.
public static final long SHUFFLE_SORT = 2; // RangePartition shuffle, keys are total sorted.
public static final long MR_SHUFFLE_SORT = 4; // HashPartition shuffle, keys are sorted by partition.
private long edgeType;
private int numPartitions;
public SparkEdgeProperty(long edgeType, int numPartitions) {
this.edgeType = edgeType;
this.numPartitions = numPartitions;
}
public SparkEdgeProperty(long edgeType) {
this.edgeType = edgeType;
}
public boolean isShuffleNone() {
return edgeType == SHUFFLE_NONE;
}
public void setShuffleNone() {
edgeType = SHUFFLE_NONE;
}
public boolean isShuffleGroup() {
return (edgeType & SHUFFLE_GROUP) != 0;
}
public void setShuffleGroup() {
edgeType |= SHUFFLE_GROUP;
}
public void setMRShuffle() {
edgeType |= MR_SHUFFLE_SORT;
}
public boolean isMRShuffle() {
return (edgeType & MR_SHUFFLE_SORT) != 0;
}
public void setShuffleSort() {
edgeType |= SHUFFLE_SORT;
}
public boolean isShuffleSort() {
return (edgeType & SHUFFLE_SORT) != 0;
}
public long getEdgeType() {
return edgeType;
}
@Explain(displayName = "Shuffle Type")
public String getShuffleType() {
if (isShuffleNone()) {
return "NONE";
}
StringBuilder sb = new StringBuilder();
if (isShuffleGroup()) {
sb.append("GROUP");
}
if (isMRShuffle()) {
if (sb.length() != 0) {
sb.append(" ");
}
sb.append("PARTITION-LEVEL SORT");
}
if (isShuffleSort()) {
if (sb.length() != 0) {
sb.append(" ");
}
sb.append("SORT");
}
return sb.toString();
}
public int getNumPartitions() {
return numPartitions;
}
public void setNumPartitions(int numPartitions) {
this.numPartitions = numPartitions;
}
}