Minor, but I find these big switch statements painful to manage. How about a factory interface where you statically create anon classes based on PDataType.values()? Like this:

      private static interface PhoenixArrayFactory {
            PhoenixArray newArray(PDataType type, Object[] elements);
      }

     private static PhoenixArrayFactory ARRAY_FACTORY = new [PDataType.values().length];
     static {
         int i = 0;
         for (PDataType type : PDataType.values()) {
             if (!type.isArrayType()) {
                 ARRAY_FACTORY[i++] - new PhoenixArrayFactory() {
                     @Override
                     PhoenixArray newArray(PDataType type, Object[] elements) {
                         return new PhoenixArray(type, elements);
                     };
                 };
         }
     }

and then this method could just do this:

      PhoenixArrayFactory factory = ARRAY_FACTORY[actualType.ordinal());
      if (factory == null) {
         throw new IllegalArgumentException("Cannot create an array of " + actualType);
      }
      return factory.newArray(actualType, elements);