范围联接的最佳性能是什么

时间:2019-07-14 15:12:05

标签: sql apache-spark apache-spark-sql

我在spark sql上有性能问题。哪种情况更好?

假设我们有一个数据框

tableA: 
timestamp |  id
10:00:00  |   1
10:00:00  |   2
10:00:00  |   3
10:01:00  |   1
10:01:00  |   2
10:01:00  |   3

和另一个:

tableB:
timestamp_a | timestamp_b
08:00:00    | 11:00:00
09:00:00    | 12:00:00

我想通过

上的左联接来联接这两个表
timestamp > timestamp_a && timestamp < timestamp_b

而tableA是左表。

我正在尝试确定性能:

第一种情况是我描述的左连接

第二种情况是用我描述的这种左连接左连接tableA的唯一时间戳,然后将它们与tableA的不同id列交叉连接

1 个答案:

答案 0 :(得分:0)

如果有重叠,那么我认为第二种方法会更好-尤其是如果第一种方法有很多重复项:

      function initMap() {
        var directionsDisplay = new google.maps.DirectionsRenderer;
        var directionsService = new google.maps.DirectionsService;
        var map = new google.maps.Map(document.getElementById('map'), {
          zoom: 7,
          center: {lat: 41.85, lng: -87.65}
        });
        directionsDisplay.setMap(map);
        directionsDisplay.setPanel(document.getElementById('right-panel'));

        var control = document.getElementById('floating-panel');
        control.style.display = 'block';
        map.controls[google.maps.ControlPosition.TOP_CENTER].push(control);

        var onChangeHandler = function() {
          calculateAndDisplayRoute(directionsService, directionsDisplay);
        };
        document.getElementById('start').addEventListener('change', onChangeHandler);
        document.getElementById('end').addEventListener('change', onChangeHandler);
      }

      function calculateAndDisplayRoute(directionsService, directionsDisplay) {
        var start = document.getElementById('start').value;
        var end = document.getElementById('end').value;
        directionsService.route({
          origin: start,
          destination: end,
          provideRouteAlternatives: true,
          travelMode: 'DRIVING'
        }, function(response, status) {
          if (status === 'OK') {
            directionsDisplay.setDirections(response);
          } else {
            window.alert('Directions request failed due to ' + status);
          }
        });
      }
    </script>
    <script async defer
    src="https://maps.googleapis.com/maps/api/js?key=Enter_API_KEY&callback=initMap">
    </script>

如果第一个表中的重复项很少,那么这可能无济于事。